Итерация и завершение в цикле Java 8 - PullRequest
0 голосов
/ 09 июня 2019

Выполните итерацию в цикле / потоке forEach, чтобы проверить ненулевое значение и вернуть первое ненулевое значение элемента.

List<Box> boxes; // Each box has List<Items> //Each item has a value

Нужноперебирать блоки и в каждом блоке находить ненулевые элементы, которые не имеют нулевого значения.

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Вы можете следовать этому коду:

items = boxes.stream()
            .filter(box -> box.items!= null) // check for not null-items 
            .flatMap(box -> box.items.stream()
                    .filter(Objects::nonNull) // check for not null item
                    .filter(item -> item.value != null)) // check for not null value
            .collect(Collectors.toList());
0 голосов
/ 09 июня 2019

Вы можете использовать комбинацию фильтра и flatMap.

  1. Отфильтруйте пустые поля и поля без полей
  2. Получите список всех элементов для всех полей, используя flatMap
  3. Отфильтровать все нулевые элементы

Код выглядит следующим образом:

List<Item> presentItems = boxes.stream()
    .filter(b -> b != null && b.getItems() != null)
    .flatMap(Box::getItems)
    .filter(i -> i != null)
    .collect(Collectors.toList());

В другой заметке я бы посоветовал вам не сохранять нулевые записи в ваших списках, если вы можетеизбегайте этого, это сделает вашу жизнь намного проще.

...