Methode zum Filtern Java?
Ich hab eine Frage und zwar bei einer Methode. Es geht darum:
Die Methode heißt filterStorage(filter: Art): LinkedList<item>
Und zwar will ich alle Produkte (items) filtern. Als Filter dient halt ein Objekt aus dem Enum Art. Und zwar wenn der Filter (gross) lautet dann soll er alle items rausfiltern und in neue LinkedList kopieren. Die soll dann halt zurückgegeben werden.
ich sitz hier seit 3 Stunden und bei mir kommt einfach das gewünschte ergebnis nicht raus.
hat vielleicht jemand eine Idee
2 Antworten
Man kann also davon ausgehen, dass du die Methode selbst implementieren möchtest und dass sie sich in einer Klasse befindet, über die sie Zugriff auf alle Produktitems hat. Die Items, davon würde ich nun ausgehen, liegen ebenso in einer LinkedList.
Zuerst müsste geprüft werden, ob der erwartete Filter gewählt wurde. Hierzu gleich vorweg: Ich richte mich in meinen Code-Snippets nach üblichen Java Code-Konventionen.
if (filter == Art.GROSS) {
Dann werden die Werte der einen Liste in die andere kopiert (man könnte ebenso auf andere Mittel zurückgreifen, wie z.B. addAll oder eine klassisch selbst geschriebene Schleife) und der Variable für die alte Liste ein neues Listenobjekt zugeordnet.
LinkedList<Item> copy = storage;
storage = new LinkedList<>();
Zuletzt folgt die Rückgabe.
Mal angenommen, die Items liegen in der Liste "items", dann kannst du es am einfachsten über einen Stream lösen.
private LinkedList<Item> filterStorage(Art filter) {
return new LinkedList<Item>(items.stream().filter(item->item.art==filter).toList());
}
Bzw. wenn es keinen zwingenden Grund gibt, dass die Methode wirklich eine LinkedList zurückgeben muss, sondern auch irgendeine List zurückgegeben werden kann:
private List<Item> filterStorage(Art filter) {
return items.stream().filter(item->item.art==filter).toList();
}
Beim Aufruf musst du dann halt der Methode mitgeben, nach welcher Art gefiltert werden soll.
Z.B. so:
List<Item> = storage.filterStorage(Art.GROSS);