Java 8 stream - преобразование списка <Integer []> в карту <Integer, список <Integer>> - PullRequest
0 голосов
/ 29 октября 2018

Я хочу преобразовать List<Integer[]> в Map<Integer,List<Integer>>. Integer[] имеет размер два. Integer[0] является ключом карты, а Integer[1] будет значением карты.

Давайте рассмотрим пример. Входные значения:

List<Integer[]> a=new ArrayList<>(5);
a.add(new Integer[] {1,2});
a.add(new Integer[] {1,3});
a.add(new Integer[] {1,15});
a.add(new Integer[] {2,11});
a.add(new Integer[] {2,7});

И полученная карта вывода будет иметь две клавиши, 1 и 2.

Значения ключа 1 равны 2,3 и 15.

Значения ключа 2 равны 11 и 7.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Попробуйте это

Map<Integer,List<Integer>> map = new HashMap<>();
a.stream().forEach(t -> {
                map.computeIfAbsent(t[0], ArrayList::new);
                map.get(t[0]).add(t[1]);
            });
0 голосов
/ 29 октября 2018

Вот поток, который группирует собранные результаты по первому элементу массива:

Map<Integer, List<Integer>> gouped = a.stream()
    .collect(Collectors.groupingBy(arr -> arr[0], 
             Collectors.mapping(arr -> arr[1], Collectors.toList())));

И эта карта {1=[2, 3, 15], 2=[11, 7]}

...