【问题标题】:Drools - Find minimum Java 8 Local DateDrools - 查找最低 Java 8 本地日期
【发布时间】:2018-06-14 23:05:21
【问题描述】:

我正在尝试使用 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 后,纪元将转换为本地日期。添加这个以防万一它有助于寻找这个的人。

【问题讨论】:

    标签: java-8 drools localdate


    【解决方案1】:

    我猜问题是 Drools 没有保留返回的 min 函数的类型,而是将其视为 Comparable 而不是 long

    有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
    

    希望对你有帮助,

    【讨论】:

    • 一如既往,您对 Drools 问题的及时回复非常有帮助。我选择选项 1 或 3,因为这与我们的代码库更相关。感谢您帮助解决此问题。我已将演员表添加到我原来的问题中,它也可以正常工作。
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2021-08-18
    • 2017-03-06
    • 2012-11-20
    • 2018-12-26
    相关资源
    最近更新 更多