如何解决Java Map Reduce By Key
我有如下对的列表:
// 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),obj21),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来减少展开的对象并得到一个pair的列表?
我的意思是预期的结果是:
pairs = [(k1,obj22)]
解决方法
看起来您需要 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());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。