Я думаю, вы хотите вернуть ObjectA
экземпляры, где значение getProperty().getPropertyId()
существует в некотором списке ObjectB
значений.
Ваша первая попытка не работает, потому что она сравнивает getPropertyId
каждого ObjectA
с getPropertyId
случайным ObjectB
(потому что вы звоните findAny
).
Вы хотите что-то вроде этого:
private List<ObjectA> getFilteredObjectAList() {
return ObjectAList.stream()
.filter(a -> ObjectBList.stream().matchAny(b -> b.getPropertyId() ==
a.getProperty().getPropertyId())
.collect(Collectors.toList());
}
Однако этот подход может медленнее, если списки большие, потому что вы сканируете список ObjectB
один раз на предмет самого члена списка ObjectA
. Лучше создать HashSet
идентификаторов, которые существуют в списке ObjectB
, а затем искать значения из списка ObjectA
в этом наборе.
private List<ObjectA> getFilteredObjectAList() {
Set<String> ids = ObjectBList.stream().map(ObjectB::getPropertyId)
.collect(Collectors.toCollection(HashSet::new));
return ObjectAList.stream()
.filter(a-> ids.contains(a.getProperty().getPropertyId())
.collect(Collectors.toList());
}