Je viens de tomber sur une question lors de l'utilisation de a List
et 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 boolean
basé 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 path
paramè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 isExcluded
test dans son ensemble. Est-il vraiment intéressant de savoir si un élément de EXCLUDE_PATHS
est 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.stream
mé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 isExcluded
mé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.
toLowerCase
appliqué à la constante qui est déjà en minuscules? Ne devrait-il pas s'appliquer à l' path
argument?