[rules-users] how to count distinct nested property?

Jeremy Ary jeremy.ary at gmail.com
Tue Jul 22 10:38:33 EDT 2014


I wonder if something like this might do it?

when
    $set : HashSet ( ) from  accumulate ( ObjectA ( $myId : objectC.myId ),
                              init ( HashSet uniqueIds = new
HashSet<String>(); ),
                              action ( uniqueIds.add($id); ),
                              reverse ( uniqueIds.remove($id); ),
                              result ( uniqueIds ) )
    HashSet ( this == $set, size > 1 )
then
    // consequence
end


- Jeremy



On Tue, Jul 22, 2014 at 8:42 AM, richardhands <
richard.hands at uk.sopragroup.com> wrote:

> Hi,
>
> I’m trying to wrap my head around how to use a combination of accumulate
> from and collect from to get a count of how many unique items there are of
> a
> nested child property and run the RHS of a rule if it’s > 1
>
> So I have
>
> Many of Object A
>
> Each one contains
> An object B
> An object C
>
> Object C contains a nested child property
>
> So
>
> A
> +-+-B
>    |
>    +-C – property myId
>
> (many of these in the working memory)
>
> The rule I’m working with right now is
>
> rule "B must only be at 1 myId per day"
>     when
>       $b : B()
>       $c : C()
>       $aList : ArrayList (size > 1)
>         from collect(
>               A(b == $b, c.getDate() == $c.getDate()) )
>       eval ( RulesUtils.countIdsForC ($aList) > 1 )
>    then
>      //fire some rules here
> end
>
> and the RulesUtils method is
>
>   public static int countIdsForC (List  aList)
>   {
>     Set<Integer> myIds = new HashSet<Integer>();
>     for (A a : aList)
>     {
>       myIds.add(a.getC().getMyId());
>     }
>     return myIds.size();
>   }
>
>
> Now I’m well aware that this is sub-optimal, and indeed is firing lots of
> extra times and is really (Really) slow.  I can vizualise that this should
> easily be possible with some combination of compound accumulate and collect
> statements, but for the life of me I can’t work out the correct arrangement
> (This is actually for use in an optaplanner ruleset so it will potentially
> be working on lots of data, over many iterations).
>
> Any suggestions on how to do this the way I know it needs to be, greatfully
> appreciated 
>
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/how-to-count-distinct-nested-property-tp4030424.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140722/49025101/attachment.html 


More information about the rules-users mailing list