Как обработать объект не смог удовлетворить фильтр в потоке Java 8 - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь обработать объект, который не удовлетворяет условию фильтра в потоке.

List<Integer> list = Arrays.asList(1,23,43,12,4,5);
list.stream().filter( i -> i > 10).collect(Collections.toList);

Это вернет список объектов больше 10. Но я также хочу обработать объекты, которые не могут выполнить условие (> 10).

Спасибо.

Ответы [ 3 ]

0 голосов
/ 28 августа 2018
List<Integer> list = Arrays.asList(1,23,43,12,4,5);
list.stream().filter( i -> i > 10).collect(Collections.toList);

изменить на

Map < Boolean, List < Integer > > map = Stream.of( 1, 23, 43, 12, 4, 5 ).collect( Collectors.groupingBy( e -> e > 10 ) );

тогда вы можете использовать :

map.get( false )// is list of has not condition
map.get(true) // is list of has condition
0 голосов
/ 28 августа 2018

Я бы просто запустил два цикла с stream(), чтобы получить два разных списка:

List<Integer> list = Arrays.asList(1,23,43,12,4,5);

List<Integer> largerThanTen = list.stream().filter( i -> i > 10)
                                 .collect(Collectors.toList());
List<Integer> smallerOrEqualToTen = list.stream().filter( i -> i <= 10)
                                .collect(Collectors.toList());

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

0 голосов
/ 28 августа 2018
Map<Boolean, List<Integer>> map = list.stream()
              .collect(Collectors.partitioningBy(i > 10));


map.get(false/true).... do whatever you want with those that failed or not
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...