Récupérer le premier élément qui correspond à des critères
Comment obtenir le premier élément qui correspond à un des critères dans un cours d'eau? J'ai essayé cela mais ne fonctionne pas
this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name));
Que les critères ne fonctionne pas, le filtre méthode est appelée dans une autre classe que de s'Arrêter.
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;
}
}
Vous devez vous connecter pour publier un commentaire.
Cela pourrait être ce que vous cherchez:
Un exemple:
De sortie est:
(Stop s)->...
.(
)
autour de votreStop s
dans votre lambda..findFirst().orElse(yourBackUpGoesHere);
. Qui peut également être null.findFirst().orElse(null);
Station 1
, puis lefilter
fonction renvoie un vide stream. Dans ce cas, il va générer unNullPointerException
àget().getPassengerCount()
?findFirst()
retourne un objet Facultatif (JavaDoc), qui peut être vide. Dans ce cas, l'appel àget()
va lancer la NPE. Pour éviter cela, utilisezorElse()
au lieu deget()
et de fournir un secours d'objet (commeorElse(new Station("dummy", -1)
), ou de stocker le résultat defindFirst()
dans une variable et de vérifier avecisEmpty()
avant d'appelerget()
Lorsque vous écrivez une expression lambda, l'argument de la liste à gauche de
->
peut être un argument entre parenthèses liste (éventuellement vide), ou un seul identificateur sans parenthèses. Mais dans la deuxième forme, l'identifiant ne peut pas être déclaré avec un nom de type. Donc:est une syntaxe incorrecte; mais
est correct. Ou:
est aussi correcte que si le compilateur a assez d'informations pour comprendre les types.
s
à utiliser avec le lambda? Il n'a pas vraiment l'allure d'une erreur pour moi, mais apparemment je ne suis pas en utilisant le même compilateur que vous êtes.findFirst().get()
appliqué aprèsfilter
), et je ne reçois pas toutes les erreurs. Le troisième exemple qui fonctionne pour moi aussi.