Drools - 查找最小 Java 8 本地日期
Drools - Find minimum Java 8 Local Date
我正在尝试使用 Drools 中的累积函数从日期列表 (Java 8) 中找到最小日期。
这是我的规则:
rule "Print minimum Service Date from Bill Lines"
when
accumulate (
$lineItem : LineLevelData($dateOfService : dateOfService) ,
$epochDay : min($dateOfService.toEpochDay())
)
$minServiceDate : LocalDate() from LocalDate.ofEpochDay($epochDay)
then
System.err.println("Min. Service Date used in rules calculation : " + $minServiceDate);
end
这是我得到的异常:
Unable to Analyse Expression LocalDate.ofEpochDay($epochDay):
[Error: unable to resolve method using strict-mode: java.time.LocalDate.ofEpochDay(java.lang.Comparable)]
[Near : {... LocalDate.ofEpochDay($epochDay) ....}]
^ : [Rule name='Print minimum Service Date from Bill Lines']
显然,我在这里缺少一些基础知识。有人可以帮我解决这个问题吗?
Drools 版本:7.5.0
POJO:
public class LineLevelData{
LocalDate dateofService;
}
更新:
rule "Print minimum Service Date from Bill Lines"
when
accumulate ( $lineItem : LineLevelData ( $dateOfService : dateOfService ) ,
$epochDay : min($dateOfService.toEpochDay()) )
$epochLong : Number (longValue > 0 ) from $epochDay
$minServiceDate : LocalDate( ) from LocalDate.ofEpochDay($epochLong)
then
System.err.println("Min. Service Date used in rules calculation : " + $minServiceDate);
end
Long型转换后,epoch转换为Local date。添加这个以防万一它可以帮助寻找这个的人。
我想问题是 Drools 没有保留 min
函数返回的类型,而是将其视为 Comparable
而不是 long
。
有 3 种方法可以解决这个问题:
- Create your own accumulate function处理
LocalDate
- 使用 accumulate with inline code
- 使用下面的解决方法强制 Drools
cast
将 Comparable
返回到 LocalDate
。
解决方法:
rule "Print minimum Service Date from Bill Lines"
when
$c: Comparable() from accumulate (
LineLevelData($dateOfService : dateOfService) ,
min($dateOfService)
)
$minServiceDate: LocalDate() from $c
then
System.err.println("Min. Service Date used in rules calculation : " +
$minServiceDate);
end
希望对您有所帮助,
我正在尝试使用 Drools 中的累积函数从日期列表 (Java 8) 中找到最小日期。
这是我的规则:
rule "Print minimum Service Date from Bill Lines"
when
accumulate (
$lineItem : LineLevelData($dateOfService : dateOfService) ,
$epochDay : min($dateOfService.toEpochDay())
)
$minServiceDate : LocalDate() from LocalDate.ofEpochDay($epochDay)
then
System.err.println("Min. Service Date used in rules calculation : " + $minServiceDate);
end
这是我得到的异常:
Unable to Analyse Expression LocalDate.ofEpochDay($epochDay):
[Error: unable to resolve method using strict-mode: java.time.LocalDate.ofEpochDay(java.lang.Comparable)]
[Near : {... LocalDate.ofEpochDay($epochDay) ....}]
^ : [Rule name='Print minimum Service Date from Bill Lines']
显然,我在这里缺少一些基础知识。有人可以帮我解决这个问题吗?
Drools 版本:7.5.0
POJO:
public class LineLevelData{
LocalDate dateofService;
}
更新:
rule "Print minimum Service Date from Bill Lines"
when
accumulate ( $lineItem : LineLevelData ( $dateOfService : dateOfService ) ,
$epochDay : min($dateOfService.toEpochDay()) )
$epochLong : Number (longValue > 0 ) from $epochDay
$minServiceDate : LocalDate( ) from LocalDate.ofEpochDay($epochLong)
then
System.err.println("Min. Service Date used in rules calculation : " + $minServiceDate);
end
Long型转换后,epoch转换为Local date。添加这个以防万一它可以帮助寻找这个的人。
我想问题是 Drools 没有保留 min
函数返回的类型,而是将其视为 Comparable
而不是 long
。
有 3 种方法可以解决这个问题:
- Create your own accumulate function处理
LocalDate
- 使用 accumulate with inline code
- 使用下面的解决方法强制 Drools
cast
将Comparable
返回到LocalDate
。
解决方法:
rule "Print minimum Service Date from Bill Lines"
when
$c: Comparable() from accumulate (
LineLevelData($dateOfService : dateOfService) ,
min($dateOfService)
)
$minServiceDate: LocalDate() from $c
then
System.err.println("Min. Service Date used in rules calculation : " +
$minServiceDate);
end
希望对您有所帮助,