Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel>

SphereZ

Mitglied
Hallo, es geht darum das wir aus einer alten Übung ein "Lager" erweitern sollen mit eine "getSorted" Methode welche meine Artikel im Lager als sortiertes Array wiedergibt und dieses Sortierkriterium wird der Methode mittels dem funktionalen Interface BiPredicate <Artikel, Artikel> übergeben. Mir ist es aber aktuell ein Rätsel wie ich damit ein Sortierkriterium übergeben soll ich komme einfach nicht drauf auch die andere Studenten haben aktuell noch keine Lösung gefunden und wir verstehen auch nicht wirklich warum wir keinen Comparator nutzen sollen sondern BiPredicate . Ich brauche nicht unbedingt eine Lösung aber Denkanstöße o.ä. wären sehr hilfreich.
 
Was soll das Ergebnis des Predicates sein? Ob das erste größer als das Zweite ist?
Wenn ich gerade richtig verstehe was Sie wissen wollen z.B. habe ich im Array Artikel und die Unterkategorien davon Buch, CD und Video mittels des Predicates soll man z.B. die Unterkategorien nach dem Alphabet sortieren also zuerst alle Bücher dann alle CD usw. oder jeder Artikel hat nen Bestand und soll dann anhand des Bestandes sortiert werden. Hoffe habe die Frage gerade richtig verstanden bin noch nicht lange am Programmieren und hänge jetzt schon etwas länger daran.
 
Meine Frage ist, wenn 2 Artikel in das BiPredicate kommen, was ist das Ergebnis dieser Funktion (es kann nur false oder true sein). Aber was bedeutet false oder true, als Ausgabe?

PS: Dieses Forum verwendet "du"
 
Dass Ihr ein BiPredicate statt eines Comparators verwenden sollt, ist wahrscheinlich ein Tutor-Problem.
Da scheint einiges im Argen zu liegen.

Delegiert doch einfach einen Comparator auf das BiPredicate oder anders herum.
 
Mhm das ist dann ja abhängig davon was ich vorhabe will ich wie zuerst gesagt nach dem Alphabet sortieren. Würde true wohl meinen Artikel 1 ist > Artikel 2 und false umgekehrt (bezüglich Natural Order) auch wenn ich mir gerade nicht genau sicher bin wie das ohne (Natural Order) funktioniert bzw. ob das überhaupt funktioniert wenn es sich zwar um Artikel Objekte handelt aber nicht alle Artikel Objekte zur selben Unterklasse Buch etc gehören. Beim Bestand fände ich das schon einfacher da muss ich ja einfach nur jeweils die Bestände mit einander vergleichen also Artikel1.getBestand > Artikel2.get Bestand.
 
Dass Ihr ein BiPredicate statt eines Comparators verwenden sollt, ist wahrscheinlich ein Tutor-Problem.
Da scheint einiges im Argen zu liegen.

Delegiert doch einfach einen Comparator auf das BiPredicate oder anders herum.
Das Problem ist unser eigentlicher Tutor macht aktuell was anderes wir haben nur ne Vertretung. Vorlesungen finden keine statt nur Audios mit Folien und die Folien gehen wirklich nur grob auf ein Thema ein ohne groß weiter im Internet oder in Büchern zu recherchieren kommt man quasi nicht weiter. Geht das denn ? Wüsste gerade nicht wie da wir gerade erst Comparator vorgestellt bekommen haben und ich zuerst auch dachte ich muss den in der Aufgabe verwenden bis ich gesehen habe wir sollen als Interface das BiPredicate nutzen was mir und so ziemlich jedem anderen absolut unverständlich war.
 
Ich würde in jedem Fall eine Rückfrage stellen. Man kann es sonst nur so interpretieren, dass es ein "Artikel1 kleiner als Artikel2" Comparator ist und das mit true oder false zu klassifizieren ist.
 
Ich würde in jedem Fall eine Rückfrage stellen. Man kann es sonst nur so interpretieren, dass es ein "Artikel1 kleiner als Artikel2" Comparator ist und das mit true oder false zu klassifizieren ist.
Hmh ok dann werde ich mal den Prof anschreiben was er meint. Auch wenn ich mir immer noch unsicher bin wie ich das mache haben leider auch im Gegensatz zum ersten Semester keinerlei Beispielcode wo man sich dran orientieren kann und wenn man im Internet sucht findet man eigentlich auch nur Beispiele mittels Comparator ohne BiPredicate zumindest ich finde da nichts ;D
 
Delegiert doch einfach einen Comparator auf das BiPredicate oder anders herum.
[CODE lang="java" title="SortedByBiFunction"]import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.BiFunction;

public class SortedByBiFunction<E> {

private ArrayList<E> innerList;

public List<E> getSorted(final BiFunction<E, E, Boolean> biFunction) {

final List<E> sorted = (List<E>) innerList.clone();

final Comparator<E> comparator =
new Comparator<E>() {

@Override
public int compare(E o1, E o2) {
if ( biFunction.apply(o1, o2) ) {
return 1;
}
return 0;
}
};

Collections.sort(
sorted ,
comparator );

return sorted;
}

}
[/CODE]
 
[CODE lang="java" title="SortedByBiFunction"]import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.BiFunction;

public class SortedByBiFunction<E> {

private ArrayList<E> innerList;

public List<E> getSorted(final BiFunction<E, E, Boolean> biFunction) {

final List<E> sorted = (List<E>) innerList.clone();

final Comparator<E> comparator =
new Comparator<E>() {

@Override
public int compare(E o1, E o2) {
if ( biFunction.apply(o1, o2) ) {
return 1;
}
return 0;
}
};

Collections.sort(
sorted ,
comparator );

return sorted;
}

}
[/CODE]
Der Comparator ist nicht gültig, damit lässt sich nicht korrekt sortieren.
 
Der Comparator ist nicht gültig, damit lässt sich nicht korrekt sortieren.
[CODE lang="java" title="SortedByBiFunction fixed"]import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.BiFunction;

public class SortedByBiFunction<E> {

private ArrayList<E> innerList;

public List<E> getSorted(final BiFunction<E, E, Integer> biFunction) {

final List<E> sorted = (List<E>) innerList.clone();

final Comparator<E> comparator =
new Comparator<E>() {

@Override
public int compare(E o1, E o2) {
return biFunction.apply(o1, o2);
}
};

Collections.sort(
sorted ,
comparator );

return sorted;
}

}
[/CODE]
 

Zurück
Oben