首页 > 解决方案 > 始终返回 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());
  }

标签: java-8java-stream

解决方案


因为作者想让过滤客户的方法更通用。所以他允许客户端输入一个谓词来定义他们的过滤逻辑。

然后他可以通过配置过滤谓词在泛型之上构建一个更专业的过滤方法版本,最后调用这个泛型方法。

并且在过滤逻辑与泛型相同的情况下,它只是将过滤谓词定义为始终为真。它可以帮助客户端更容易地调用它,因为客户端不需要自己定义谓词。

如果您尝试想象将来会有许多用例需要过滤不同类型的客户,您就会开始感受到作者的意图,例如:

  • getActiveCustomerRecord()
  • getVipCustomerRecord()
  • 等等

推荐阅读