Я читал не связанный поток , когда я читал комментарий: Каждый раз, когда мне нужно многострочное лямбда, я перемещаю строки в закрытый метод и передаю методссылка вместо лямбды.
Я спрашивал: как правильно реализовать это поведение?С булевым методом, как указано в комментарии, или с предикатом?
Пример: скажем, я хочу проверить, можно ли использовать Table
, где использование означает isClean
, isEmpty
, hasChair
.
class Table{
public boolean hasChair(){...}
public boolean isClean(){...}
public boolean isEmpty(){...}
}
Я могу реализовать свой тест фильтрации для своего списка List<Table> tablesList = Arrays.asList(table1,table2,table3,table4);
двумя способами: первый с логическим значением:
public boolean isUsable(){
return hasChair() && isClean() && isEmpty();
}
И использовать его с tablesList.stream().filter(Table::isUsable)
Второй способ - с предикатом:
public Predicate<Table> isUsable(){
return table -> table.isEmpty() && table.isClean() && table.hasChair();
}
Используется с tablesList.stream().filter(isUsable())
Какая правильная реализация?Почему выбирают одно вместо другого?Есть ли большая разница?