#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()));