Я пытаюсь написать простую функцию уменьшения, которая будет проверять , присутствуют ли все элементы srcList
в targetList
:
List<String> srcList = Arrays.asList("a", "b");
List<String> targetList = Collections.singletonList("a");
Boolean result = srcList.stream().reduce(true
, (prevResult, srcElement) -> targetList.contains(srcElement)
, (prevResult, currentResult) -> prevResult && currentResult);
System.out.println(result); // prints false as expected
Вышеупомянутая лямбда Кажется, не работает, как ожидалось. Например, если мы изменим элемент в списке целей, результат будет напечатан как true:
List<String> srcList = Arrays.asList("a", "b");
List<String> targetList = Collections.singletonList("b");
Boolean result = srcList.stream().reduce(true
, (prevResult, srcElement) -> targetList.contains(srcElement)
, (prevResult, currentResult) -> prevResult && currentResult);
System.out.println(result); // prints true
Похоже, что выражение возвращает результат только последней accumulator
оценки (т. Е. Операция содержит в этом случае) и комбинатор не выполняет &&
для всех результатов.
Может кто-нибудь объяснить, пожалуйста?