微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java Map Reduce By Key

如何解决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 举报,一经查实,本站将立刻删除。