В дополнение к @assylias
answer вы также можете использовать новый поток api, если вы используете Java 8:
List l = Arrays.asList(4, 5, 6);
static boolean condition(Integer i) {
return i == 5;
}
static Predicate predicate = YourClassName::condition;
l.stream()
.filter(predicate.negate())
.forEach(System.out::println);
Если вы инвертируете условие, решение становится еще более кратким, поскольку вам не нужно negate()
предикат, что позволяет использовать только ссылку на метод:
List l = Arrays.asList(4, 5, 6);
static boolean condition(Integer i) {
return i != 5; // <-- condition has been negated
}
l.stream()
.filter(YourClassName::condition)
.forEach(System.out::println);
Один из красотой этого является то, что поток лениво оценивается, т. е. операция filter()
фактически не оценивается до тех пор, пока она не будет использована терминальной операцией, такой как forEach()
. Подробнее об этом можно найти в учебнике для Oracle .