繁体   English   中英

Java 8 流映射<K,V>列出<T>

[英]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 bysort是按其自然终端操作进行的。 他们必须全面执行,以能够产生均匀的输出的第一要素,所以涉及它们作为非终端操作不买在性能/内存占用方面的东西。

它发生的Java 8所定义sorted作为非终端操作,但是该决定可能导致欺骗性代码,因为操作将阻塞,直到它已经收到所有上游的元件,并且将不得不保留它们全部的同时接收。

您还可以使用以下技术将 Hashmap 条目转换为 ArrayList,

ArrayList list = hashMap.values();

如何转换列表<object>至 Map<k, v> 使用 java stream<div id="text_translate"><p> 我想将List&lt;ObjectInList&gt;转换为Map&lt;K, V&gt;</p><pre> class ObjectInList { List&lt;Long&gt; listWithLong; Map&lt;String, Object&gt; dataMap; // there is 'id' key, and i want to use this id as key in map to be converted }</pre><p> 新的 map 格式如下</p><pre>String type; // this type is value of dataMap. List&lt;Long&gt; contents</pre><p> List&lt;Object&gt;中的每个 Object 都可以有重复的类型</p><p>例如</p><pre>///////// before converted //////////// [ { list: [1,2,3], dataMap: { type: "a", } }, { list: [4,5,6], dataMap: { type: "b", } }, { list: [7,8], dataMap: { type: "a", } }, ] ///////////// after converted ////////// { "a": [1,2,3,7,8], "b": [4,5,6] }</pre></div></k,></object>

[英]How to convert LIst<Object> to Map<K, V> with using java stream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM