Jak zdobyć pierwszy element spełniający kryteria w strumieniu? Próbowałem tego, ale nie działa
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
Kryteria te nie działają, metoda filtru jest wywoływana w klasie innej niż Stop.
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
źródło
źródło
.findFirst().orElse(yourBackUpGoesHere);
. To też może być zerowe.findFirst().orElse(null);
findFirst()
zwraca opcjonalny obiekt ( JavaDoc ), który może być pusty. W tym przypadku wywołanieget()
wyrzuci NPE. Aby temu zapobiec, użyjorElse()
zamiast tegoget()
obiektu zastępczego (takiego jakorElse(new Station("dummy", -1)
) i podaj go , lub zapisz wynikfindFirst()
w zmiennej i sprawdź jąisEmpty()
przed wywołaniemget()
Kiedy piszesz wyrażenie lambda, lista argumentów po lewej stronie
->
może być listą argumentów w nawiasach (prawdopodobnie pustą) lub pojedynczym identyfikatorem bez żadnych nawiasów. Ale w drugiej formie nie można zadeklarować identyfikatora z nazwą typu. A zatem:ma nieprawidłową składnię; ale
jest poprawne. Lub:
jest również poprawne, jeśli kompilator ma wystarczającą ilość informacji, aby określić typy.
źródło
s
do użycia z lambdą? Dla mnie to nie wygląda na błąd, ale najwyraźniej nie używam tego samego kompilatora co ty.findFirst().get()
zastosowanym pofilter
) i nie otrzymuję żadnych błędów. Trzeci przykład też mi odpowiada.Myślę, że to najlepszy sposób:
źródło