Java 8 map list для отображения списков по ключу - PullRequest
0 голосов
/ 25 мая 2018

У меня следующий код 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 и потоки?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

В Java 8 вы можете сделать как ответ @ Евгения.А в Java 7 вы можете использовать org.apache.commons.collections.CollectionUtils следующим образом:

List<String> idList = (List<String>) CollectionUtils.collect(objectList, 
                                new BeanToPropertyValueTransformer("id"));
0 голосов
/ 25 мая 2018

Это так же просто, как groupingBy:

queries.stream()
       .collect(Collectors.groupingBy(BaseQuery::getCharacteristicId));

Это создаст List<BaseQuery> как значение, это неявно:

queries.stream()
       .collect(Collectors.groupingBy(
            BaseQuery::getCharacteristicId,
            Collectors.toList()));

Но если вам нужны гарантииизменчивый List:

queries.stream()
       .collect(Collectors.groupingBy(
            BaseQuery::getCharacteristicId,
            Collectors.toCollection(ArrayList::new)));
...