Je viens de tomber sur une question lors de l'utilisation de a Listet sa stream()méthode. Bien que je sache comment les utiliser, je ne sais pas trop quand les utiliser.
Par exemple, j'ai une liste, contenant divers chemins vers différents endroits. Maintenant, j'aimerais vérifier si un seul chemin donné contient l'un des chemins spécifiés dans la liste. Je voudrais retourner un booleanbasé sur le fait que la condition a été remplie ou non.
Ce n'est bien sûr pas une tâche difficile en soi. Mais je me demande si je devrais utiliser des flux ou une boucle for (-each).
La liste
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Exemple - Stream
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Exemple - Pour chaque boucle
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Notez que le pathparamètre est toujours en minuscules .
Ma première hypothèse est que l'approche pour chaque est plus rapide, car la boucle reviendrait immédiatement, si la condition est remplie. Alors que le flux bouclerait toujours sur toutes les entrées de la liste afin de terminer le filtrage.
Mon hypothèse est-elle correcte? Si oui, pourquoi (ou plutôt quand ) utiliserais-je stream()alors?
new String[]{…}ici. Juste utiliserArrays.asList("my/path/one", "my/path/two")
String[], il n'est pas nécessaire d'appeler Arrays.asList. Vous pouvez simplement diffuser sur le tableau en utilisant Arrays.stream(array). En passant, j'ai du mal à comprendre le but du isExcludedtest dans son ensemble. Est-il vraiment intéressant de savoir si un élément de EXCLUDE_PATHSest littéralement contenu quelque part dans le chemin? Ie isExcluded("my/path/one/foo/bar/baz")reviendra true, ainsi que isExcluded("foo/bar/baz/my/path/one/")…
Arrays.streamméthode, merci de l'avoir signalé. En effet, l'exemple que j'ai posté semble tout à fait inutile pour quelqu'un d'autre que moi. Je suis conscient du comportement de la isExcludedméthode, mais c'est vraiment juste quelque chose dont j'ai besoin pour moi, donc, pour répondre à votre question: oui , c'est intéressant pour des raisons que je ne voudrais pas mentionner, car cela ne rentrerait pas dans le champ d'application de la question initiale.
toLowerCaseappliqué à la constante qui est déjà en minuscules? Ne devrait-il pas s'appliquer à l' pathargument?