流口水:比较来自同一对象的2个数组列表

时间:2019-03-18 15:25:05

标签: java arraylist compare drools

我有一个类,该类构造了7个ArrayList:

public class Fruchtplanungsmodul {

    private ArrayList<Crops> fruchtliste1F;
    private ArrayList<Crops> fruchtliste2F;
    private ArrayList<Crops> fruchtliste3F;
    private ArrayList<Crops> fruchtliste4F;
    private ArrayList<Crops> fruchtliste5F;
    private ArrayList<Crops> fruchtliste6F;
    private ArrayList<Crops> fruchtliste7F;

    // Constructor
    public Fruchtplanungsmodul() {
        fruchtliste1F = new ArrayList<>();
        fruchtliste2F = new ArrayList<>();
        fruchtliste3F = new ArrayList<>();
        fruchtliste4F = new ArrayList<>();
        fruchtliste5F = new ArrayList<>();
        fruchtliste6F = new ArrayList<>();
        fruchtliste7F = new ArrayList<>();
    }
    functions for deleting Objects....
}

我想使用Drools-rules在此列表中加载对象。 我确实将相同的Objecttyps加载到所有Arraylist中。例如,在此规则中,我将4个Object Crops加载到第一个ArrayList中。

rule "Körnerlegmunosen: Planung erste Feldrigkeit"
    when
        //$grund:         Grundbedingung(grundbedingung == 1)
        $feld:          Feldrigkeit(feldrigkeit1 == "Körnerleguminosen")
        $m:             Fruchtplanungsmodul()

    then

        Crops erbse = new Crops("Erbse", "Koernerleguminose","BF", "Hafer", "Silomais", "Sommerung", 6);
        Crops ackerbohne = new Crops("Ackerbohne" , "Koernerleguminose", "BF", "Silomais", "Wintergerste", "Sommerung", 4);
        Crops lupine = new Crops("Lupine", "Koernerleguminose", "BF", "Späte Kartoffel", "Winterroggen", "Sommerung", 4);
        Crops sojabohne = new Crops("Sojabohne", "Koernerleguminose", "BF", "Futterrübe", "winterroggen", "Sommerung", 3);

        insert(erbse);
        insert(ackerbohne);
        insert(lupine);
        insert(sojabohne);
        $m.addFrucht1(erbse);
        $m.addFrucht1(ackerbohne);
        $m.addFrucht1(lupine);
        $m.addFrucht1(sojabohne);
end

在其他规则中,我从Fruchtplanungsmodul()类中将不同的Crops加载到其他ArrayList中。

我的问题是:有什么方法可以比较来自不同ArrayList的对象?

例如,ArrayList“ fruchtliste2F”具有4个来自Crops类型的对象,而ArrayList“ fruchtliste3F”也具有4个来自Crops类型的对象。现在,我需要使用规则检查两个ArrayList中是否存在一个具有相同名称的对象。如果是这样,则规则应从第二个列表中删除该对象。

感谢您的帮助! 菲利普

1 个答案:

答案 0 :(得分:0)

如果您要检查的数组是固定的(即,您始终要检查数组#2和数组#3),则可以执行以下操作:

rule "Delete duplicated"
when 
  $f: Fruchtplanungsmodul()
  $c1: Crop() from $f.fruchtliste2F
  $c2: Crop(name == $c1.name) from $f.fruchtliste3F
then
  //If you want to remove the fact you have inserted too:
  delete($c2);

  //Remove the object from the array
  $f.deleteFrucht3($c2);
end

如果要检查所有数组,则可以创建上述规则的副本,或者创建Java类通过索引访问数组并创建通用规则以比较所有规则的方式。

希望有帮助,