Java 8 Drools-查找最小Java 8本地日期
我试图使用Drools中的累积函数从日期列表(Java8)中找到最小日期 这是我的规则:Java 8 Drools-查找最小Java 8本地日期,java-8,drools,localdate,Java 8,Drools,Localdate,我试图使用Drools中的累积函数从日期列表(Java8)中找到最小日期 这是我的规则: rule "Print minimum Service Date from Bill Lines" when accumulate ( $lineItem : LineLevelData($dateOfService : dateOfService) , $epochDay : min($dateOfService.toEpochDay()) ) $minServiceD
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:
更新:
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将转换为本地日期。如果它有助于某人查找此项,则添加此项。我想问题在于Drools没有保留返回的
min
函数的类型,而是将其视为一个可比的,而不是一个长的
有三种方法可以解决此问题:
- 处理
LocalDate
- 使用
- 使用下面的解决方法强制Drools将
可比较的转换回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
希望能有所帮助,一如既往,您对口水问题的及时回应非常有帮助。我选择选项1或3,因为这与我们的代码库更相关。感谢您帮助解决此问题。我把演员阵容添加到了我原来的问题中,效果也不错。
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