Je viens de tomber sur une question lors de l'utilisation d'un List
et son stream()
méthode. Même si je sais comment les utiliser, je ne suis pas tout à fait sûr de savoir quand les utiliser.
Par exemple, j'ai une liste, contenant des chemins différents à des endroits différents. Maintenant, j'aimerais vérifier si un seul, étant donné le chemin d'accès contient des chemins d'accès indiqués dans la liste. J'aimerais revenir un boolean
basée sur si la condition est remplie.
Ce n'est bien sûr pas une tâche difficile en soi. Mais je me demande si je ne devrais pas utiliser les flux, ou pour (chaque) en boucle.
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 l' path
paramètre est toujours en minuscules.
Ma première hypothèse est que le pour-chaque approche est plus rapide, parce que la boucle de retour immédiatement, si la condition est remplie. Alors que le flux serait encore en boucle sur toutes les entrées de la liste afin de filtrage complet.
Est mon hypothèse est correcte? Si oui, pourquoi (ou plutôt quand) puis-je utiliser stream()
, alors?