我正在阅读一个不相关的线程,当我读到一条评论时:每当我发现自己需要一个多行 lambda 时,我都会将这些行移动到一个私有方法并传递方法引用而不是 lambda。
我在问:实现这种行为的正确方法是什么?使用评论中发布的布尔方法还是谓词?
示例:假设我想检查 aTable是否可用,其中可用意味着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())
哪个是正确的实现?为什么选择一个而不是另一个?有什么大的区别吗?
一只斗牛犬
UYOU
蓝山帝景
相关分类