#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, операция не требуется.