Java Map 按键归约
Posted
技术标签:
【中文标题】Java Map 按键归约【英文标题】:Java Map Reduce By Key 【发布时间】:2021-06-13 11:31:15 【问题描述】:我有一个配对列表如下:
// pairs = [(k1, obj1), (k2, obj1)]
List<Pair<String, Object> pairs;
那我想把那些对象展开成很多对象,然后按键化简
pairs.stream().map(pair ->
// every object is expanded into many objects, obj11, obj12, ...
List<Object> objects = expand(pair.getRight());
// the return is [(k1, obj11), (k1, obj12), (k2, obj21), (k2, obj22)]
return objects.stream().map(object -> new MutablePair<String, Object>(pair.getLeft(), object)).collect(Collectors.toList());
).reduce(...
// how to reduce it by key and get a list of pairs
...);
我的问题是,如何通过key减少展开的对象并得到pairs列表?
我的意思是预期的结果是:
pairs = [(k1, obj11), (k1, obj12), (k2, obj21), (k2, obj22)]
【问题讨论】:
【参考方案1】:看起来您需要flatMap
而不是map
,以及collect
而不是reduce
:
List<Pair<String, Object>> expandedPairs =
pairs.stream()
.flatMap(pair -> expand(pair.getRight()).stream()
.map(object -> new MutablePair<String, Object>(pair.getLeft(), object)))
.collect(Collectors.toList());
【讨论】:
谢谢,但是展开返回 List @geek-techcode 是的,然后您将List<Object>
和 map
每个 Object
流式传输到 MutablePair
。 flatMap
将这些小流的所有 Pairs 扁平化为单个 Stream of Pairs。
对不起我之前的评论,它有效,非常感谢;)以上是关于Java Map 按键归约的主要内容,如果未能解决你的问题,请参考以下文章
使用Java8 Stream API对Map按键或值进行排序