Streams filter

Mariexshhx

Bekanntes Mitglied
Java:
    public List<Lebensmittel> inventur(List<Lebensmittel> liste){
        Stream<Lebensmittel> lstream = liste.stream();
        List<Lebensmittel> nichtabgelaufen =
       lstream.filter(Lebensmittel::isAbgelaufen)
               .toList();
        return nichtabgelaufen;
    }

Hey ich will eine Methode schreiben die mir eine Liste mit allen noch haltbaren Lebensmittel zurückliefert. Ich soll dabei halt Stream nutzen kenne mich aber noch nicht so aus. Wie kann ich so filtern, dass nur die Elemente in die Liste kommen bei denen isAbgelaufen false zurück gibt ?
 
Du kannst das Argument für filter(...) z.B. als Lambda Expression umschreiben und statt der Method Reference z.B. schreiben: lebemsmittel -> !lebensmittel.isAbgelaufen().
Oder, wenn du Java 11 nutzt, kannst du auch Predicate.not() nutzen und schreiben: Predicate.not(Lebensmittel::isAbgelaufen).
 
Java:
    public List<Lebensmittel> inventur(List<Lebensmittel> liste){
        Stream<Lebensmittel> lstream = liste.stream();
        List<Lebensmittel> nichtabgelaufen =
       lstream.filter(Lebensmittel->!Lebensmittel.isAbgelaufen())
               .toList();
        return nichtabgelaufen;
    }

meins du so ?

Muss ich dann den Lamdausdruck quasi mit dem Objekttypen Lebensmittel machen ?
 
Java:
  public List<Lebensmittel> abgelaufen(List<Lebensmittel> liste) {
        Stream<Lebensmittel> lstream = liste.stream();
        List<Lebensmittel> abgelaufen =
                lstream.filter(l -> l.isAbgelaufen())
                        .toList();
        long count =
                lstream.filter(l -> l.isAbgelaufen()).count();
      
      return abgelaufen
          
      }

es gibt mehrere Aufgaben ....
 
Ich weiß nicht, ob das so die schönste Lösung ist
Die Frage ist doch erst einmal, ob es überhaupt eine Lösung ist. Hast Du es den einmal ausprobiert? Nutze Stream! Mach etwas aktiv damit! Nur so lernst Du den Umgang. Dir hier von uns für alle mögliche Fragen die Antworten zu holen wird Dir vermutlich nicht wirklich weiter helfen, denn Streams und den Umgang mit ebensolchen hast Du bisher vermutlich noch nicht verstanden.

Also schnapp Dir die IDE Deiner Wahl und mach was aktiv mit Streams. Schau Dir die Doku der Klassen an. Lies einfach einmal den Text, den es über den Klassen so gibt ... Und wirklich: Probiere die diversen Dinge aus!
 
Streams kann man nicht wiederverwenden, wenn er einmal verarbeitet wurde. Du musst also immer einen neuen Stream erzeugen.
Daher ist es so wichtig, dass man es auch aktiv ausprobiert. Dann hat man die IllegalStateException und lernt sowas direkt beim doing.

Aber auch die Logik ist wichtig - was wird so noch ein Wert ermittelt wenn der vor dem Rücksprung in der lokalen Variable gespeichert wird?
 

Zurück
Oben