簡體   English   中英

Stream.map(...)和Collectors.mapping(...)之間有什么區別?

[英]What's the difference between Stream.map(…) and Collectors.mapping(…)?

我注意到Stream中暴露的許多功能顯然都在收集器中重復,例如Stream.map(Foo::bar)Collectors.mapping(Foo::bar, ...)Stream.count()Collectors.counting() 這些方法有什么區別? 有性能差異嗎? 它們是否以某種方式實現不同,這會影響它們的並行化程度?

似乎在Stream復制功能的收集器存在,因此它們可以用作收集器組合下游收集器 ,例如groupingBy()

舉一個具體的例子,假設您想要計算“賣家的交易數量”。 你可以這樣做:

Map<Seller, Long> salesBySeller = 
    txns.stream()
        .collect(groupingBy(Txn::getSeller, counting()));

如果沒有collect counting()mapping()類的收集器,這些類型的查詢會更加困難。

有很大的不同。 流操作可以分為兩組:

  • 中間操作 - Stream.mapStream.flatMapStream.filter 那些生成Stream的實例並且總是懶惰的 ,例如,沒有實際遍歷Stream元素。 這些操作用於創建轉換鏈
  • 終端操作 - Stream.collectStream.findFirstStream.reduce等。執行實際工作,例如對流執行轉換鏈操作,生成終端值 可以是List,元素數,第一元素等。

有關更多信息,請查看Stream包摘要 javadoc。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM