java-8 - 始终返回 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());
}
解决方案
因为作者想让过滤客户的方法更通用。所以他允许客户端输入一个谓词来定义他们的过滤逻辑。
然后他可以通过配置过滤谓词在泛型之上构建一个更专业的过滤方法版本,最后调用这个泛型方法。
并且在过滤逻辑与泛型相同的情况下,它只是将过滤谓词定义为始终为真。它可以帮助客户端更容易地调用它,因为客户端不需要自己定义谓词。
如果您尝试想象将来会有许多用例需要过滤不同类型的客户,您就会开始感受到作者的意图,例如:
getActiveCustomerRecord()
getVipCustomerRecord()
- 等等
推荐阅读
- clojure - Clojure 序列和集合
- python - conda 环境变量未在 Windows 中加载
- php - 图像不会保存到项目文件夹
- reactjs - 无法下载 npm 模块
- android - React Native Android 深度链接 url 未通过
- angular - PWA Angular 应用程序名称在部署后停留在旧名称上 - 如何强制更新?
- ruby-on-rails - Rails 是否从发布请求的参数键中删除问号?
- wordpress - 如何阻止 x-robots-tag 在我的整个网站上设置 noindex?
- python - 试图将 pd.date_range 合并到我的 python 分析中
- vb.net - vb.net / C# 外部处理程序