¿Cómo obtener el primer elemento que coincide con un criterio en una secuencia? He intentado esto pero no funciona
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
Ese criterio no funciona, el método de filtro se invoca en una clase distinta a 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
usuario2147674
fuente
fuente
.findFirst().orElse(yourBackUpGoesHere);
. Eso también puede ser nulo.findFirst().orElse(null);
findFirst()
devuelve un objeto opcional ( JavaDoc ), que puede estar vacío. En este caso, la llamada aget()
lanzará el NPE. Para evitar que eso suceda, use enorElse()
lugar deget()
y proporcione un objeto de respaldo (comoorElse(new Station("dummy", -1)
), o almacene el resultado defindFirst()
en una variable yisEmpty()
get()
Cuando escribe una expresión lambda, la lista de argumentos a la izquierda de
->
puede ser una lista de argumentos entre paréntesis (posiblemente vacía) o un identificador único sin paréntesis. Pero en la segunda forma, el identificador no se puede declarar con un nombre de tipo. Así:es una sintaxis incorrecta; pero
es correcto. O:
también es correcto si el compilador tiene suficiente información para averiguar los tipos.
fuente
s
para usar con el lambda? Realmente no me parece un error, pero aparentemente no estoy usando el mismo compilador que tú.findFirst().get()
aplicado despuésfilter
) y no obtengo ningún error. El tercer ejemplo también me funciona.Creo que esta es la mejor manera:
fuente