首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用流将List<Entry>转换为映射值是列表的位置?

如何使用流将List<Entry>转换为映射值是列表的位置?
EN

Stack Overflow用户
提问于 2018-06-08 14:19:06
回答 1查看 482关注 0票数 5

如何使用Java8中的流将List<Entry>转换为Map<Entry::getKey, List<Entry::getValue>>

我无法为Collectors.toMap()提供一个好的Collectors.toMap():

代码语言:javascript
运行
复制
List<Entry<Integer, String>> list = Arrays.asList(Entry.newEntry(1, "a"), Entry.newEntry(2, "b"), Entry.newEntry(1, "c"));
        Map<Integer, List<String>> map = list.stream().collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));

我想要的是:{'1': ["a", "c"], '2': ["b"]}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 14:21:08

您可以通过使用groupingBy收集器和mapping作为下游收集器来做到这一点:

代码语言:javascript
运行
复制
myList.stream()
       .collect(groupingBy(e -> e.getKey(), mapping(e -> e.getValue(), toList())));

所需进口:

代码语言:javascript
运行
复制
import static java.util.stream.Collectors.*;

实际上,您可以使用toMap收集器实现相同的结果:

代码语言:javascript
运行
复制
 myList.stream()
       .collect(toMap(e -> e.getKey(), 
                 v -> new ArrayList<>(Collections.singletonList(v.getValue())),
              (left, right) -> {left.addAll(right); return left;}));

但是,当您可以使用groupingBy收集器时,它并不理想,而且它的可读性也较低。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50762681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档