日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

列表流和feed流_通过流而不是列表

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 列表流和feed流_通过流而不是列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

列表流和feed流

開幕式免責聲明:這并不總是一個好主意。 我將介紹這個想法,以及為什么它是一個好主意的一些原因,但隨后我將討論一些不太理想的實例。

懶惰

如您所知,我在Python中的學習幾乎和在Java中一樣。 我一發現Python就很喜歡生成器。 它們允許對集合執行延遲操作,因此您可以傳遞迭代器/生成器,直到最終真正需要這些操作的最終結果–而不影響原始集合(在大多數情況下;但您不太可能意外影響它)。

我真的很喜歡這個主意。 懶惰使您幾乎不需要做任何工作,直到需要結果為止,而且還可以做到這一點,因此不會有無用的內存來存儲中間集合。

懶于Java

Java也有迭代器,但沒有迭代器。 但是,對于集合的惰性操作,它確實具有與之相當相似的功能: Stream 。 盡管不像Python中的生成器那樣通用,但Stream基本上可以以相同的方式使用。

繞過溪流

在很多情況下,您應該返回Stream而不是返回的List (或其他集合)。 這不僅為您提供了一些懶惰的好處,還為您做了一些事情。

如果返回對象的接收者希望將其collect()放入您計劃返回的List之外的其他東西,或者他們希望以您從未想到的方式來reduce()它,則可以給他們提供Stream而不必擔心。 然后,他們可以通過一兩個Stream方法調用來獲得所需的內容。

對此有什么不好

當Stream像集合一樣傳遞時,存在一個很難解決的問題:它們是一次性使用的。 這意味著,如果下面的一個函數想要使用Stream而不是List ,那么它就不容易做到,因為它需要使用List分別做兩件事。

public static List normalize(List input) {int total = input.stream().mapToInt(i -> i).sum();return input.stream().map(i -> i * 100 / total).collect(Collectors.toList()); }

為了接收Stream ,您需要collect()它,然后在其上運行兩個操作。

public static Stream normalize(Stream input) {List inputList = input.collect(Collectors.toList());int total = inputList.stream().mapToInt(i -> i).sum();return inputList.stream().map(i -> i * 100 / total); }

這稍微違反了傳遞Stream的目的。 這并不可怕,因為我們正在嘗試使用Stream的“最終”結果。 除了不是最終結果。 這是中間結果,用于計算下一個Stream輸出。 它創建了浪費內存的中間集合。

圍繞此問題有很多方法,類似于該“文章”的解決方法,但是它們要么實現起來很復雜,要么容易出現用戶錯誤。 我猜想只使用我向您展示的第二種方法是可以的,因為與第一種方法相比,它仍然可能有相當不錯的性能提升,但這使我感到煩惱。

有趣(但可能有點傻)的選擇

如果您熟悉我的文章,您可能會覺得本文與我前段時間寫的有關使用decorator轉換集合的文章背道而馳 。 從技術上講,這篇文章確實認為這是一個相當幼稚的想法,特別是因為該想法是受Stream啟發的。 但是,與本文中介紹的Stream的想法相比,裝飾器的想法有一個主要好處:您可以一次又一次地遍歷裝飾的集合。 它的效率可能不如Stream ,特別是因為我不確定如何并行化它,但是它肯定具有重用性。

我有機會再次研究這個想法,看看是否可以找到一種更好的方法來實現,但是我對此表示懷疑。

奧托羅

所以,那是我的主意。 您可以選擇接受或保留它。 我不確定這在典型項目中有用的頻率,但是我想我將在當前和將來的項目中嘗試一下。 謝謝閱讀。 如果您對此有意見,請在下面評論,并讓我知道。

翻譯自: https://www.javacodegeeks.com/2015/02/pass-streams-instead-of-lists.html

列表流和feed流

總結

以上是生活随笔為你收集整理的列表流和feed流_通过流而不是列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。