Сравнение списка 2 dto и установка значений с использованием потоков Java

#arraylist #java-8 #java-stream

#arraylist #java-8 #java-stream

Вопрос:

Я застрял на проведении сравнений между 2 списками Dto и установке их значений.

       List<DbDTO> dbList = data
      List<PriDTO> prList = data

   //dbDTO contains PriDTO

    Class DbDTO{
       private PriDTO prdto;
     }

    dbList.stream().filter(x -> (prList.stream().filter(y -> y.getId().equals(x.getRefId()) 
            amp;amp; y.getName().equals(x.getName()).forEach(x-> x.setPrdto(y)))))
  

Как только будет найдено соответствие, мне нужно установить для PriDTO значение DbDTO. Я не могу продолжить после фильтрации. Нужна помощь.

Заранее спасибо

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

1. возможно, вы ищете anyMatch вместо внутреннего filter ..

2. ДА. Если anyMatch, то установите значения.

Ответ №1:

Вы можете использовать .findFirst after filtering для получения первого или null, если не совпадают

 dbList.forEach(x -> x.setPrdto(prList.stream()
                                     .filter(y -> y.getId().equals(x.getRefId()) 
                                               amp;amp; y.getName().equals(x.getName()))
                                     .findFirst()
                                     .orElse(null)));
  

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

1. После получения соответствующего элемента здесь установите значение с помощью setter x.setPrdto(..)

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

3. prList может быть null или его элемент может быть null?

4. prList может быть нулевым

5. лучше поместить всю эту операцию в условие if о проверке null, поскольку, если prList равен null, операция не требуется.