Java 8 – TemporalQuery
TemporalQuery
是查询临时对象以制定更好的业务决策的标准方法。 在 Java 8 中,所有主要的日期时间类都实现了Temporal
和TemporalAccessor
接口,因此TemporalQuery
可以针对所有这些 Java 类运行。
1. TemporalQuery
接口
TemporalQuery
是一个函数式接口,因此可以用作 lambda 表达式或方法参考的分配目标。 方法queryForm()
使用时间对象查询并返回查询的值。
该实现定义查询的逻辑,并负责记录该逻辑。 它可以使用TemporalAccessor
上的任何方法来确定结果。
输入对象不得更改。
@FunctionalInterface
public interface TemporalQuery<R>
{
R queryFrom(TemporalAccessor temporal);
}
2. TemporalQuery
示例
让我们看一些示例,以更好地了解此接口。
2.1 给定的时间在营业时间内?
我们可以使用TemporalQuery
确定任何给定时间是否在一定范围内。 例如。 时间是否介于工作时间之间。
LocalTime now = LocalTime.now();
System.out.println("Currently Working :: " + now.query(WorkingHoursQuery));
private static final TemporalQuery<Boolean> WorkingHoursQuery = temporal -> {
LocalTime t = LocalTime.from(temporal);
return t.compareTo(LocalTime.of(9, 0)) >= 0
&& t.compareTo(LocalTime.of(17, 0)) < 0;
};
程序输出:
Currently Working :: false
2.2 获取当前财务季度
我们还可以使用TemporalQuery
确定该年度的当前财务季度。 在下面的示例中,第一个财政季度被认为是从一月到三月。 更改方法实现以实现所需的行为。
LocalDate today = LocalDate.now();
System.out.println("Current Financial Quarter :: " + today.query(CurrentQuarterQuery));
private static final TemporalQuery<Integer> CurrentQuarterQuery = temporal -> {
LocalDate date = LocalDate.from(temporal);
return (date.getMonthValue() / 3) + 1;
};
程序输出:
Current Financial Quarter :: 2
请向我发送在 Java 8 中使用带有日期的TemporalQuery
的有关问题。
学习愉快!