首页 > 解决方案 > 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 和流?

标签: javajava-8java-stream

解决方案


它很简单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)));

推荐阅读