преобразование списка в карту с помощью java8

#java #java-8 #java-stream

Вопрос:

У меня есть arraylist

 List<Integer> h = Arrays.asList(1,2,3,4,5,6);
 

Я хочу отфильтровать четные числа, а затем сохранить их на карте с ключом, который представляет собой уникальное число, начинающееся с 1, а значение является отфильтрованным значением с помощью java8

выход 1-2 2-4 3-6

Я буду использовать фильтр и Collectors.toMap() собирать

 Map<Integer,Integer> j =  h.stream().filter(fe->fe%2==0).collect(Collectors.toMap(?,?));
 

каков будет результат?

Комментарии:

1. Я не понимаю, как должна быть заполнена карта. Почему это не 1-2, 2-3, 3-4 ?

2. Да, но в конце есть 3-6 то, что не является номером пары. Вот почему я не понимаю

3. о да ! спасибо вам

4. Вы можете попробовать что-то подобное для своего потока, h.stream().forEach(fe-> {if (fe % 2 == 0) { map.computeIfAbsent(map.size() 1,i->fe); }});

5. что-то вроде этого: int[] counter = new int[1]{1}; ....collect(Collectors.toMap(counter[0] , value -> value))

Ответ №1:

что-то вроде того

 List<Integer> h = Arrays.asList(1,2,3,4,5,6);
AtomicInteger f = new AtomicInteger(0);
Map<Integer,Integer> j = h.stream()
                    .filter(fe-> fe%2==0) 
                    .collect(Collectors.toMap(fs -> f.incrementAndGet(), fs -> fs));
 

Комментарии:

1. ах,проверьте этот список<Целое число> h = Массивы.asList(1,2,3,4,5,6); Атомарный регистр f = новый атомарный регистр(0); Карта<Целое число><Целое число,Целое число> j = h.поток() .фильтр(fe-<Целое число, Целое число>> fe%2==0) .сбор(Сборщики.Сопоставьте(fs -<Целое число,Целое число>>> f.Приращение(), fs -<Целое число,Целое число>>>> fs));

2. Я только что обновил ответ, если это то, что вы ищете, пожалуйста, подтвердите мой ответ

Ответ №2:

Я не тестировал это, и, возможно, это не лучшая идея, но если вам нужно использовать Collectors.toMap, возможно, сработает следующее

 Map<Integer,Integer> j =  h.stream()
                           .filter(fe->fe%2==0)
                           .collect(Collectors.toMap(i ->{
            return h.stream().filter(fe->fe%2==0).collect(Collectors.toList()).indexOf(i);
        },Function.identity()));