Wenn du Arrays vergleichen willst, macht man das über
[highlight=Java]Arrays.equals(arr1, arr2)[/highlight]
Allerdings müssen die Elemente da auch in der gleichen Reihenfolge sein. Du musst dir wohl eine eigene Methode schreiben, da ich denke, dass die Reihenfolgen unterschiedlich sein dürfen oder?
Nachtrag:
So sollte es ungefähr aussehen, wenn beide Element die gleichen Elemente beinhalten sollen, die Reihenfolge aber egal ist. (ungetestet)
[highlight=Java]public boolean equals(Object[] arr1, Object[] arr2) {
if (arr1.length != arr2.length) {
return false;
}
for (Object o1 : arr1) {
boolean found = false;
for (Object o2 : arr2) {
if (o1.equals(o2)) {
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}
[/highlight]
Vergleicht die equals-methode die Objekte in der entsprechenden Reihenfolge?
Gibt es nicht auch eine andere Methode die schaut ob ein Objekt im anderen Array vorhanden ist, oder nicht?
Bei Arrays#equals(Object,Object) müssen die Objekte in der gleichen Reihenfolge sein, wie ich schon beschrieben hab. Ob es eine fertige Methode gibt ka, aber nimm mein Code von oben, entferne die erste If Abfrage, dann sollte die Methode true zurück geben, wenn alle Element aus arr1 auch in arr2 drin sind.
Also erstens:
Mir ist aufgefallen, dass du Ingredient mit RecipeIngredient vergleichst.
Du müsstest dann die equals Methoden der beiden überschreiben, damit ein Vergleich überhaupt möglich ist. Oder erbt RecipeIngredient von Ingredient?
Des weiteren habe ich noch etwas gefunden. Benutz in SearchCriteria auch eine List, dann kannste die Methode containsAll(Collection c) benutzen, dann brauchste keine eigene Methode
Das Array in SearchCriteria sollst du durch eine List (z.b. ArrayList) ersetzen. Wäre mein Vorschlag.
Dann müsstest du das Ingredient aus RecipeIngredient rausholen und dann damit vergleichen.
Die Methode kannst du einfach überschreiben indem du eine [highlight=Java]public boolean equals(Object o)[/highlight] Methode in deine Ingrendient Klasse einbaust. Du könntest dir die auch einfach über Eclipse, wenn du die IDE nutzt, die equals Methode erstellen lassen.
Evtl wäre besser, wenn du den Quellcode der 3 Klassen(Ingrendient, RecipeIngrendient, und die Klasse mit der Search Methode) mal zeigst, dann kann ich das mal ändern, so wie ich meine.
Ja, zu entscheiden, was wofür relevant ist, ist manchmal schon eine Kunst. Und ich weiß nicht, ob man erwarten kann, dass jemand den Enthusiasmus aufzubringen bereit ist, der notendig ist, um sich aus zusammenhangslosen Codestücken das zusammenzubasteln, was notwendig ist, um den Fehler nachvollziehen, und sich dann die Arbeit macht, ihn zu beheben, auf die Gefahr hin, dass der Threadersteller dann ganz enttäuscht antwortet mit "Ja, bei DIR geht das jetzt, aber bei MIR ist dies-und-das ja gaaanz anders"...
Wenn ich das richtig sehe, vergleichst du einen Array von Ingredients mit einer List von RecipeIngredients. Ein weiterer Versucht:
Vorher:
Code:
if (criteria.getIngredients().equals(recipes.get(i).getRecipeIngredient()))
{
recipeList.add(recipes.get(i));
}
Nachher:
Code:
Set<Ingredient> a = new HashSet<Ingredient>(Arrays.asList(criteria.getIngredients()));
List<RecipeIngredient> list = recipes.get(i).getRecipeIngredient();
Set<Ingredient> b = new HashSet<Ingredient>();
for (RecipeIngredient ri : list)
{
b.add(ri.getIngredient());
}
if (a.equals(b))
{
recipeList.add(recipes.get(i));
}