Как получить первый элемент, соответствующий критерию в потоке? Я пробовал это, но не работает
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
Этот критерий не работает, метод фильтра вызывается не в классе 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
источник
источник
.findFirst().orElse(yourBackUpGoesHere);
. Это также может быть нулевым.findFirst().orElse(null);
findFirst()
возвращает необязательный объект ( JavaDoc ), который может быть пустым. В этом случае вызовget()
вызовет NPE. Чтобы этого не произошло, используйтеorElse()
вместоget()
и предоставьте резервный объект (напримерorElse(new Station("dummy", -1)
) или сохраните результатfindFirst()
в переменной и проверьте егоisEmpty()
перед вызовомget()
Когда вы пишете лямбда-выражение, список аргументов слева от него
->
может быть либо списком аргументов в скобках (возможно, пустым), либо одним идентификатором без скобок. Но во второй форме идентификатор не может быть объявлен с именем типа. Таким образом:неверный синтаксис; но
правильно. Или:
также является правильным, если у компилятора достаточно информации для определения типов.
источник
s
для использования с лямбда-выражением? Для меня это не похоже на ошибку, но я, по-видимому, не использую тот же компилятор, что и вы.findFirst().get()
примененным послеfilter
) и не получаю никаких ошибок. Третий пример мне тоже подходит.Думаю, это лучший способ:
источник