在Drools Expert 6.5中对字符串进行计数和分组,并使用累积或收集关键字

时间:2017-01-03 00:49:39

标签: java java-stream drools

如何使用drools规则计算列表中V的百分比。如果V的百分比是80%,则点燃流产规则。

我有一个只有两个值的ArrayList:V和N。

List<String> list = new ArrayList<>();

如何用drools规则计算V的数量,每个V和N值1,得到V和N的总和。

在java中

  Map<String, Long> counted = list.stream()
             .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    System.out.println("Counted: "+counted);

上面的表达式打印

  

计算:{V = 4,N = 15}

获取值后,将会有一个drols规则表达式,如果出现80%,则计数V外观会打印&#34; ok&#34;否则打印不允许。

1 个答案:

答案 0 :(得分:0)

这是一个计算列表中V的百分比的规则:

rule "countVN"
when
  $vn: ArrayList( $s: size )
  accumulate( String( toString == "V" ) from $vn;
              $cnt: count( 1 );
              $cnt.doubleValue()/$s >= 0.8 )
then
  System.out.println( "80% or more" );
end

仅针对&gt; = 80%的情况触发。如果您在任何情况下都需要结果,请使用

  ...
  accumulate( String( toString == "V" ) from $vn;
              $cnt: count( 1 ))
then
  if( $cnt.doubleValue()/$s >= 0.8 ) ...