¿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
spara 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