У меня есть два HashSet с объектами одного типа. Мои критерии поиска такие: поиск в первом наборе, а если его нет, то поиск в другом наборе. Я пробовал со слоем Stream, выполнив следующие шаги, как указано ниже.
Set<MyObject> firstSet = new HashSet<>();
Set<MyObject> secondSet = new HashSet<>();
и эти два набора имеют некоторые значения.
Predicate<MyObject> match = myObject -> StringUtils.equals(myValue, myObject.getMyValue());
firstSet.values().stream().filter(match).findFirst()
.orElse(secondSet.values().stream().filter(match)
.findFirst().orElseThrow(()-> new MyException()));
Мой соответствующий объект находится в первом наборе, и я попытался получить его вручную, и я его получил ... но, используя указанную выше итерацию, я всегда получаю исключение, даже если первый набор имеет согласованный объект. Пожалуйста, поправьте меня .. спасибо заранее.
secondSet.stream().values().filter(match) .findFirst().orElseThrow(()-> new MyException())
, который оценивается раньше всего в последних трех строках. - person Albert Hendriks   schedule 07.10.2020