Поток Java: как избежать добавления нулевого значения в Collectors.ToList()?

#java #java-8 #java-stream #lightweight-stream-api

#java #java-8 #java-stream #легкий поток-api

Вопрос:

Есть некоторый Java-код:

  List<Call> updatedList = updatingUniquedList 
      .stream()
      .map(s -> {
       Call call = callsBufferMap.get(s);
      }
        return call;
     }).collect(Collectors.toList());
  

Как избежать добавления в окончательный список, если переменная вызова имеет значение null?

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

1. Альтернатива .filter(Objects::nonNull) is Collectors.filtering(Objects::nonNull, Collectors.toList() . Это зависит от вашего вкуса.

Ответ №1:

 .filter(Objects::nonNull)
  

перед сбором. Или перепишите его в простой foreach с if .

Кстати, вы можете сделать

 .map(callsBufferMap::get)
  

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

1. Или с Java 9 : List<Call> updatedList = updatingUniquedList .stream() .flatMap(s -> Stream.ofNullable(callsBufferMap.get(s))) .collect(Collectors.toList());

Ответ №2:

Вы можете использовать .filter(o -> o != null) after map и before collect .

Ответ №3:

Есть несколько вариантов, которые вы можете использовать:

  1. использование метода nonnull в потоке: .filter(Objects::nonNull)
  2. использование removeIf из списка: updatedList.removeIf(Objects::isNull);

Так, например, строки могут выглядеть так:

  List<Call> updatedList = updatingUniquedList
     .stream()
     .map(callsBufferMap::get)
     .filter(Objects::nonNull)
     .collect(Collectors.toList());
  

Ответ №4:

Может быть, вы можете сделать что-то вроде этого:

 Collectors.filtering(Objects::nonNull, Collectors.toList())