[英]Java 8 stream Map<K,V> to List<T>
鉴于我有一些函数接受两个参数并返回一个值,是否可以将 Map 转换为 Stream 中的 List 作为非终端操作? 我找到的最近的方法是在地图上使用 forEach 创建实例并将它们添加到预定义的列表中,然后从该列表开始一个新的流。 还是我只是错过了什么?
例如:经典的“在一些长单词列表中找到 3 个最常出现的单词”
wordList.stream().collect(groupingBy(Function.identity, Collectors.counting))).
(现在我想流式传输该地图的 entrySet)
sorted((a,b) -> a.getValue().compareTo(b.getValue))).limit(3).forEach(print...
您应该获取地图的entrySet
并将条目粘贴到二进制函数的调用中:
inputMap.entrySet().stream().map(e->myFun(e.getKey(),e.getValue()));
以上结果是T
实例流。
您的其他示例确认了以下注释中讨论的内容: group by
和sort
是按其自然终端操作进行的。 他们必须全面执行,以能够产生均匀的输出的第一要素,所以涉及它们作为非终端操作不买在性能/内存占用方面的东西。
它发生的Java 8所定义sorted
作为非终端操作,但是该决定可能导致欺骗性代码,因为操作将阻塞,直到它已经收到所有上游的元件,并且将不得不保留它们全部的同时接收。
您还可以使用以下技术将 Hashmap 条目转换为 ArrayList,
ArrayList list = hashMap.values();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.