java - Java Map 按键归约
问题描述
我有一个配对列表如下:
// 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());
推荐阅读
- android - Android - 使用 retrofit2 请求动态 IP 地址
- laravel - 如何在 laravel 中使用从中间件解析到控制器的构造函数?
- c# - Visual Studio 2019 DirectX 使用指令
- python - OCR 给出错误的输出
- javascript - Firebase 实时数据库,仅在键 && 日期不存在时发送数据
- javascript - React-> 为什么我的反应不显示对状态所做的更改而不刷新?
- elasticsearch - 复制弹性搜索主分片
- java - Java VM 的元空间运行满
- python - 如何通过迭代另一个数据框的行来填充特定索引和列的数据框?
- javascript - 如何使下拉列表和单选按钮只读?