java - Java 8 将列表映射到按键映射列表
问题描述
我有以下 Java 代码:
List<BaseQuery> queries;
Map<Long, List<BaseQuery>> map = new HashMap<>();
for (BaseQuery query : queries) {
List<BaseQuery> queryList = map.get(query.getCharacteristicId());
if(queryList == null) {
queryList = new ArrayList<>();
map.put(query.getCharacteristicId(), queryList);
}
queryList.add(query);
}
您能否展示如何将其转换为 Java 8 和流?
解决方案
它很简单groupingBy
:
queries.stream()
.collect(Collectors.groupingBy(BaseQuery::getCharacteristicId));
这将创建一个List<BaseQuery>
as 值,它是隐式的:
queries.stream()
.collect(Collectors.groupingBy(
BaseQuery::getCharacteristicId,
Collectors.toList()));
但是如果你想要一个 mutable 的保证List
:
queries.stream()
.collect(Collectors.groupingBy(
BaseQuery::getCharacteristicId,
Collectors.toCollection(ArrayList::new)));
推荐阅读
- docker - 为什么我的 Nginx 反向代理执行 301 重定向而不是代理?
- sql - 具有 group by 和 join 两个表的 Sql 子查询
- c# - 使用另一个注入的 C++ 库从注入的 C# 调用方法
- javascript - 在普通 javascriot 中使用类“.something”移动所有元素
- mysql - 从日期范围中选择时防止 MySQL 使用临时表
- node.js - 更改节点支持网站前端使用的脚本文件
- python - Django - 为模板自定义颜色的字符串
- jenkins - 试图让 Jenkins 在 Github 存储库上构建时间。有没有简单的方法来实现这一目标?
- python - 数组上的广播掩码操作
- java - 将第一个“对象”复制到所有“对象”内部