java - 使用 Java 8 谓词改进代码 - 比较多个参数

标签 java java-8 functional-programming predicate

我不确定我的标题是否正确。我想对请求执行一些验证。我在现有代码的许多地方都有这个条件测试。它位于实用程序类中。方法是DoesRequestLineFallsWithinDateRange(object)。

我想知道是否可以通过使用 Predicates 来改进代码并让 Java 8 更加优雅并退出该方法。

处理请求: 我想检查每一行是否满足条件。因此调用方法调用该实用程序类来检查每一行是否在数据范围内。在此示例中,是订阅期内的项目 (requestLine)。

一个请求进来,一些处理将订阅成员对象添加到请求行。 然后在每一行上调用实用方法来检查请求行是否在订阅期内。

该方法首先检查它应该使用的日期字段是否不为空,以防止出现空异常。

然后使用请求行日期,与订阅成员开始/结束日期字段进行比较,以确定日期是否在范围内。

我想用 Java 8 Predicate 函数调用替换该方法。

以下是测试集合中的每一行是否在数据范围内的方法示例。

public static boolean DoesRequestLineFallsWithinDateRange(RequestLine requestLine) {
    if (isDatesNotNull(requestLine)) {
      return requestLine.getServiceStartDate().compareTo(requestLine.getSubscription().getStartDate()) >= 0
          && requestLine.getServiceStartDate().compareTo(requestLine.getSubscription().getEndDate()) <= 0;
    }
   return false;
  }

public class RequestLine(){
   private Date serviceStartDate;
   private Subscription subscription;
.....

}

最佳答案

以下是使用 Java 8 PredicatesLocalDate API 编写的示例代码

    public boolean doesRequestLineFallsWithinDateRange(RequestLine requestLine)
    {
        BiPredicate<LocalDate, LocalDate> afterDatePredicate = (startData, endDate) -> (startData.isAfter(endDate));
        BiPredicate<LocalDate, LocalDate> beforeDatePredicate = (startData, endDate) -> (startData.isBefore(endDate));

        if (Objects.isNull(requestLine))
        {
            return false;
        }

        LocalDate serviceStartDate = requestLine.getServiceStartDate();
        LocalDate startDate = requestLine.getSubscription().getStartDate();
        LocalDate endDate = requestLine.getSubscription().getEndDate();

        return afterDatePredicate.test(serviceStartDate, startDate) && beforeDatePredicate.test(serviceStartDate,
                endDate);

    }

引用的Java代码

RequestLine.java

public class RequestLine

{
    private Subscription subscription;
    private LocalDate serviceStartDate;

    // getters and setters
}

订阅.java

public class Subscription
{
    private LocalDate startDate;
    private LocalDate endDate;

    // getters and setters
}

关于java - 使用 Java 8 谓词改进代码 - 比较多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59725178/

相关文章:

java - IntStream 映射函数行为

Java 8 流分组依据

algorithm - 使用带有 2 个参数的谓词进行过滤

python - 将多个函数映射到键的字典 - Python

Java:将 bool 数组转换为单个 int

java - Swing GridBagLayout anchor 位于窗口之外

java - 字符串到列表<String>的内存高效映射

java - 使用流 : Java 8 按多个属性进行分组和排序

java - 在 Java 8 中对多个数组使用流/函数式编程

java - com.microsoft.sqlserver.jdbc.SQLServerException : Incorrect syntax near 'GO'