Слюни: Сравните 2 Arraylists из того же объекта - PullRequest
0 голосов
/ 18 марта 2019

У меня есть класс, и этот класс создает 7 списков массивов:

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. Я загружаю один и тот же Objecttyps во все Arraylists. Например, в этом правиле я загружаю 4 Objects 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

В других правилах я загружаю разные кадры в другие списки ArrayList из класса Fruchtplanungsmodul ().

Мой вопрос: есть ли способ сравнить объекты из разных списков массивов?

Например, ArrayList "fruchtliste2F" имеет 4 объекта типа Crops, а ArrayList "fruchtliste3F" также имеет 4 объекта типа Crops. Теперь мне нужно проверить с помощью правила, есть ли один объект с тем же именем в обоих списках массивов. Если это так, правило должно удалить объект из второго списка.

Спасибо за вашу помощь! Philipp

1 Ответ

0 голосов
/ 19 марта 2019

Если массивы, которые вы хотите проверить, являются фиксированными (т.е. вы всегда хотите проверять массив № 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 обращается к массивам по индексу, и создает общее правило для их сравнения.

Надеюсь, это поможет,

...