始终 returns 为真的谓词有什么用?
What is the use of a predicate that always returns true?
我在一段代码中遇到了以下方法。我试图理解为什么使用 always true 谓词的目的或含义。
private static List<Customer> getTenCustomerRecords(List<Customer> customers) {
return getFilteredTenCustomerInfo(customers, cust -> true);
}
private static List<Customer> getFilteredTenCustomerRecords(List<Customer> customers, Predicate<? super Customer> filter) {
return customers.stream()
.filter(filter)
.sorted(comparing(Customer::getOrderDate).reversed())
.distinct()
.limit(10)
.collect(toList());
}
因为作者想让过滤客户的方法更加generic.So他允许客户输入一个谓词来定义他们的过滤逻辑。
然后他可以通过配置过滤谓词在通用方法之上构建更专业版本的过滤方法,最后调用这个通用方法。
并且在过滤逻辑与通用逻辑相同的情况下,它只是将过滤谓词定义为始终为真。它可以帮助客户端更方便地调用它,因为客户端不需要自己定义Predicate。
如果你试着想象未来会有很多用例需要过滤不同类型的客户,你就会开始感受到作者的意图,例如:
getActiveCustomerRecord()
getVipCustomerRecord()
- 等等
我在一段代码中遇到了以下方法。我试图理解为什么使用 always true 谓词的目的或含义。
private static List<Customer> getTenCustomerRecords(List<Customer> customers) {
return getFilteredTenCustomerInfo(customers, cust -> true);
}
private static List<Customer> getFilteredTenCustomerRecords(List<Customer> customers, Predicate<? super Customer> filter) {
return customers.stream()
.filter(filter)
.sorted(comparing(Customer::getOrderDate).reversed())
.distinct()
.limit(10)
.collect(toList());
}
因为作者想让过滤客户的方法更加generic.So他允许客户输入一个谓词来定义他们的过滤逻辑。
然后他可以通过配置过滤谓词在通用方法之上构建更专业版本的过滤方法,最后调用这个通用方法。
并且在过滤逻辑与通用逻辑相同的情况下,它只是将过滤谓词定义为始终为真。它可以帮助客户端更方便地调用它,因为客户端不需要自己定义Predicate。
如果你试着想象未来会有很多用例需要过滤不同类型的客户,你就会开始感受到作者的意图,例如:
getActiveCustomerRecord()
getVipCustomerRecord()
- 等等