我不确定我的标题是否正确。我想对请求执行一些验证。我在现有代码的许多地方都有这个条件测试。它位于实用程序类中。方法是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 Predicates
和 LocalDate
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/