Ich bin gerade auf eine Frage gestoßen, als ich a List
und seine stream()
Methode verwendet habe. Obwohl ich weiß, wie man sie benutzt, bin ich mir nicht ganz sicher, wann ich sie benutzen soll.
Zum Beispiel habe ich eine Liste, die verschiedene Pfade zu verschiedenen Orten enthält. Jetzt möchte ich prüfen, ob ein einzelner, angegebener Pfad einen der in der Liste angegebenen Pfade enthält. Ich möchte eine zurückgeben, boolean
basierend darauf, ob die Bedingung erfüllt ist oder nicht.
Dies ist natürlich an sich keine schwere Aufgabe. Aber ich frage mich, ob ich Streams oder eine for (-each) -Schleife verwenden soll.
Die Liste
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Beispiel - Stream
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Beispiel - Für jede Schleife
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Beachten Sie, dass der path
Parameter immer klein geschrieben ist .
Meine erste Vermutung ist, dass der Ansatz für jeden Ansatz schneller ist, da die Schleife sofort zurückkehren würde, wenn die Bedingung erfüllt ist. Während der Stream immer noch alle Listeneinträge durchläuft, um die Filterung abzuschließen.
Ist meine Annahme richtig? Wenn ja, warum (oder besser wann ) würde ich stream()
dann verwenden?
new String[]{…}
. Verwenden Sie einfachArrays.asList("my/path/one", "my/path/two")
String[]
ist, müssen Sie nicht anrufen Arrays.asList
. Sie können einfach mit über das Array streamen Arrays.stream(array)
. Übrigens habe ich Schwierigkeiten, den Zweck des isExcluded
Tests insgesamt zu verstehen . Ist es wirklich interessant, ob ein Element von EXCLUDE_PATHS
buchstäblich irgendwo im Pfad enthalten ist? Dh isExcluded("my/path/one/foo/bar/baz")
wird zurückkehren true
, sowie isExcluded("foo/bar/baz/my/path/one/")
...
Arrays.stream
Methode nicht bewusst , danke, dass Sie darauf hingewiesen haben. In der Tat scheint das Beispiel, das ich gepostet habe, für andere als mich ziemlich nutzlos zu sein. Ich bin mir des Verhaltens der isExcluded
Methode bewusst , aber es ist wirklich nur etwas, das ich für mich selbst brauche, um Ihre Frage zu beantworten: Ja , es ist aus Gründen interessant, die ich nicht erwähnen möchte, da es nicht in den Anwendungsbereich passt der ursprünglichen Frage.
toLowerCase
auf die Konstante angewendet, die bereits in Kleinbuchstaben geschrieben ist? Sollte es nicht auf das path
Argument angewendet werden ?