Comment obtenir le premier élément qui correspond à un critère dans un flux? J'ai essayé mais ne fonctionne pas
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
Ce critère ne fonctionne pas, la méthode de filtrage est appelée dans une autre classe que 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
la source
la source
.findFirst().orElse(yourBackUpGoesHere);
. Cela peut également être nul.findFirst().orElse(null);
findFirst()
renvoie un objet facultatif ( JavaDoc ), qui peut être vide. Dans ce cas, l'appel àget()
lancera le NPE. Pour éviter que cela ne se produise, utilisez à laorElse()
place deget()
et fournissez un objet de secours (commeorElse(new Station("dummy", -1)
), ou stockez le résultat defindFirst()
dans une variable et vérifiez-le avecisEmpty()
avant d'appelerget()
Lorsque vous écrivez une expression lambda, la liste d'arguments à gauche de
->
peut être soit une liste d'arguments entre parenthèses (éventuellement vide), soit un identificateur unique sans aucune parenthèse. Mais dans la seconde forme, l'identifiant ne peut pas être déclaré avec un nom de type. Donc:est une syntaxe incorrecte; mais
est correct. Ou:
est également correct si le compilateur dispose de suffisamment d'informations pour déterminer les types.
la source
s
à utiliser avec le lambda? Cela ne ressemble pas vraiment à une erreur pour moi, mais je n'utilise apparemment pas le même compilateur que vous.findFirst().get()
appliqué aprèsfilter
) et je n'obtiens aucune erreur. Le troisième exemple fonctionne aussi pour moi.Je pense que c'est le meilleur moyen:
la source