Wie erhalte ich das erste Element, das einem Kriterium in einem Stream entspricht? Ich habe es versucht, aber es funktioniert nicht
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
Dieses Kriterium funktioniert nicht. Die Filtermethode wird in einer anderen Klasse als Stop aufgerufen.
public class Train {
private final String name;
private final SortedSet<Stop> stops;
public Train(String name) {
this.name = name;
this.stops = new TreeSet<Stop>();
}
public void addStop(Stop stop) {
this.stops.add(stop);
}
public Stop getFirstStation() {
return this.getStops().first();
}
public Stop getLastStation() {
return this.getStops().last();
}
public SortedSet<Stop> getStops() {
return stops;
}
public SortedSet<Stop> getStopsAfter(String name) {
// return this.stops.subSet(, toElement);
return null;
}
}
import java.util.ArrayList;
import java.util.List;
public class Station {
private final String name;
private final List<Stop> stops;
public Station(String name) {
this.name = name;
this.stops = new ArrayList<Stop>();
}
public String getName() {
return name;
}
}
java
java-8
java-stream
user2147674
quelle
quelle
.findFirst().orElse(yourBackUpGoesHere);
. Das kann auch null sein.findFirst().orElse(null);
findFirst()
gibt ein optionales Objekt ( JavaDoc ) zurück, das möglicherweise leer ist. In diesem Fall wird der Aufruf vonget()
die NPE auslösen. Um dies zu verhindern, verwenden SieorElse()
anstelle vonget()
und stellen Sie ein Fallback-Objekt (wieorElse(new Station("dummy", -1)
) bereit , oder speichern Sie das Ergebnis vonfindFirst()
in einer Variablen und überprüfen Sie esisEmpty()
vor dem Aufruf mitget()
Wenn Sie einen Lambda-Ausdruck schreiben, kann die Argumentliste links
->
davon entweder eine Argumentliste in Klammern (möglicherweise leer) oder ein einzelner Bezeichner ohne Klammern sein. In der zweiten Form kann der Bezeichner jedoch nicht mit einem Typnamen deklariert werden. So:ist falsche Syntax; aber
ist richtig. Oder:
ist auch richtig, wenn der Compiler über genügend Informationen verfügt, um die Typen herauszufinden.
quelle
s
, die mit dem Lambda verwendet werden soll? Es sieht für mich nicht wirklich nach einem Fehler aus, aber ich verwende anscheinend nicht den gleichen Compiler wie Sie.findFirst().get()
angewendet nachfilter
) und erhalte keine Fehler. Das dritte Beispiel funktioniert auch für mich.Ich denke, das ist der beste Weg:
quelle