Извлекать значения (не ключи) из списка> и вывести его в список <String> - PullRequest
0 голосов
/ 01 июня 2018

Как мне извлечь значения (не ключи) из List<Map<String,String>> и сгладить его до List<String>?

, т. Е. Попробовать следующее, но не работает.

List<Map<String,String>> mapList = .... ;

List<String> valueList = mapList.stream()
                                .map(o -> o.getValue())
                                .collect(Collectors.toList());

Я бы тоже хотел отфильтровать результат по заданному ключу.

Ответы [ 4 ]

0 голосов
/ 01 июня 2018

Объект o, который вы пытаетесь сопоставить с o.getValue (), имеет тип Map (у которого нет функции getValue ()), а не Map.Entry (у которого была бы такая функция).Вы можете получить коллекцию значений с помощью функции o.values ​​().

Затем вы можете получить поток из этой коллекции и сгладить результирующий поток потоков следующим образом:

List<String> valueList = mapList.stream()
                         .map(o -> o.values().stream())
                         .flatMap(Function.identity())
                         .collect(Collectors.toList());
0 голосов
/ 01 июня 2018

Использование .flatMap:

List<Map<String,String>> mapList = new ArrayList<>();

Map<String, String> mapOne = new HashMap<>();
mapOne.put("1", "one");
mapOne.put("2", "two");

Map<String, String> mapTwo = new HashMap<>();
mapTwo.put("3", "three");
mapTwo.put("4", "four");

mapList.add(mapOne);
mapList.add(mapTwo);

List<String> allValues = mapList.stream()
    .flatMap(m -> m.values().stream())
    .collect(Collectors.toList()); // [one, two, three, four]
0 голосов
/ 01 июня 2018

Попробуйте

    List<String> valueList = mapList.stream()
            .flatMap(map -> map.entrySet().stream())
            .filter(entry -> entry.getKey().equals("KEY"))
            .map(Map.Entry::getValue)
            .collect(Collectors.toList());
0 голосов
/ 01 июня 2018

Вы имеете в виду:

List<String> valueList = mapList.stream()
        .flatMap(a -> a.values().stream())
        .collect(Collectors.toList());

Редактировать

Что если я хочу указать ключ, например, у меня есть "id" и "firstName",но нужно только «firstName»

В этом случае вы можете использовать filter после flatmap, например, так:

List<String> valueList = mapList.stream()
        .flatMap(a -> a.entrySet().stream())
        .filter (e -> e.getKey().equals("firstName"))
        .map(Map.Entry::getValue)
        .collect(Collectors.toList ());
...