Chcę dowiedzieć się, który element nie spełnia predykatu w przypadku allmatch
.Znajdź, który element strumienia nie pasuje do podanego predykatu w allmatch
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean isEven = numbers.stream().allMatch(n-> n % 2 == 0);
Tutaj isEven
jest false
, jako elementem 1
nie predykat.
mogę używać forEach
nad strumieniem znaleźć który element zawiedzie jak:
numbers.stream().forEach(n -> {
if (n % 2 != 0)
System.out.println(n + "is Odd");
});
Czy istnieje sposób, aby dowiedzieć się, które elementy nie predykat w allmatch
kiedy wraca false
?
Dziękuję @Eugene, powinienem być bardziej szczegółowe. Zgadzam się, że to rozwiązuje dany przykład, ale tak naprawdę próbuję napisać przypadek testowy i chciałbym poznać pierwszy/dowolny element, dla którego predykat się nie powiedzie. Używałem 'forEach Assert', dzięki czemu można określić, gdzie element nie spełnia predykatu, ale nie jestem w stanie zrobić czegoś podobnego z' assert allmatch'. Czy istnieje sposób, aby znaleźć element, który zawodzi, wykonując coś w rodzaju 'assert allmatch'? – sanchitkum
@sanchitkum można odwrócić logikę. Jeśli co najmniej * * nie jest jeszcze .. 'logiczna allEven = numbers.stream() filter - findAny() isPresent (!). (N> (n% 2 == 0))..' – Eugene
@sanchitkum Ten 'numbers.stream() filtr (n -> (n% 2 == 0)).. findAny()' zwraca 'Optional', które mogą znajdować się na wartości, która nie powiedzie się (jeśli nie jest pusta). Ale zauważ, że 'findAny' i' findFirst' są różnymi rzeczami i mogą zwracać różne wartości, jeśli strumień jest równoległy, musisz wiedzieć, który naprawdę chcesz. – Eugene