gpt4 book ai didi

Java 8 流 Map 到 List

转载 作者:IT老高 更新时间:2023-10-28 20:31:54 25 4
gpt4 key购买 nike

鉴于我有一些函数接受两个参数并返回一个值,是否可以将 Map 转换为 Stream 中的 List 作为非终端操作?我找到的最近的方法是在 map 上使用 forEach 创建实例并将它们添加到预定义的列表中,然后从该列表中启动一个新的流。还是我错过了什么?

例如:经典的“在长长的单词列表中找出最常出现的 3 个单词”

wordList.stream().collect(groupingBy(Function.identity, Collectors.counting))).

(现在我想流式传输该 map 的 entrySet)

sorted((a,b) -> a.getValue().compareTo(b.getValue))).limit(3).forEach(print...

最佳答案

您应该获取 map 的 entrySet 并将条目粘合到二进制函数的调用中:

inputMap.entrySet().stream().map(e->myFun(e.getKey(),e.getValue()));

上面的结果是一个T实例流。

更新

您的附加示例证实了以下评论中讨论的内容:group bysort 本质上是终端操作。必须完整地执行它们才能产生输出的第一个元素,因此将它们作为非终端操作参与在性能/内存占用方面不会买任何东西。

Java 8 将 sorted 定义为非终端操作,但该决定可能会导致欺骗性代码,因为该操作将阻塞,直到它接收到所有上游元素,并且必须保留他们都在接收。

关于Java 8 流 Map<K,V> 到 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21233183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com