Получить только ключ из списка объектов карты, используя поток - PullRequest
4 голосов
/ 21 января 2020

Я пытаюсь получить значения только ключа из объекта List of Map, используя поток в java 8.

При потоковой передаче объекта List of map вместо этого я получаю Stream<List<String>> из List<String>.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamTest {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World");
    Map<String, String> a = new HashMap<String, String>();
    a.put("1", "Bharathi");
    a.put("2", "Test");
    a.put("3", "Hello");
    List<Map<String, String>> b = new ArrayList<>();
    b.add(a);
    System.out.println("Hello World" + b);

    /*
     * b.stream().map(c-> c.entrySet().stream().collect( Collectors.toMap(entry ->
     * entry.getKey(), entry -> entry.getValue())));
     */

    Stream<List<String>> map2 = b.stream()
            .map(c -> c.entrySet().stream().map(map -> map.getKey()).collect(Collectors.toList()));
    //List<List<String>> collect = map2.map(v -> v).collect(Collectors.toList());

  }

}

Как получить ключевой объект из объекта List of Map?

Ответы [ 4 ]

6 голосов
/ 21 января 2020

вы можете использовать flatMap вместо keySet каждого Map в пределах:

List<String> output = lst.stream()
            .flatMap(mp -> mp.keySet().stream())
            .collect(Collectors.toList());
1 голос
/ 21 января 2020

Конечно flatMap - это решение для потоковой базы! однако вы можете сделать это с не потоковой версией простым способом.

List<String> map2 = new ArrayList<>();
b.forEach(map -> map2.addAll(map.keySet()));
1 голос
/ 21 января 2020

Вы можете просто flatMap это:

b.stream().flatMap(m -> m.keySet().stream()).collect(Collectors.toList())
0 голосов
/ 21 января 2020

Вы также можете использовать несколько более декларативный способ:

List<String> collect = b.stream()
                .map(Map::keySet) // map maps to key sets
                .flatMap(Collection::stream) // union all key sets to the one stream
                .collect(Collectors.toList()); // collect the stream to a new list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...