[英]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), (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
...);
我的问题是,如何通过键减少扩展对象并获取对列表?
我的意思是预期的结果是:
pairs = [(k1, obj11), (k1, obj12), (k2, obj21), (k2, 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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.