Ho appena trovato una domanda durante l'utilizzo di a Liste il suo stream()metodo. Anche se so come usarli, non sono abbastanza sicuro di quando usarli.
Ad esempio, ho un elenco, contenente vari percorsi verso posizioni diverse. Ora, vorrei verificare se un singolo percorso specificato contiene uno dei percorsi specificati nell'elenco. Vorrei restituire un in booleanbase al fatto che la condizione sia stata soddisfatta o meno.
Questo ovviamente non è un compito difficile di per sé. Ma mi chiedo se dovrei usare flussi o un ciclo for (-each).
La lista
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Esempio: Stream
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Esempio: ciclo For-Each
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Notare che il pathparametro è sempre minuscolo .
La mia prima ipotesi è che l'approccio for-each sia più veloce, perché il ciclo tornerebbe immediatamente, se la condizione è soddisfatta. Mentre il flusso continua a scorrere tutte le voci dell'elenco per completare il filtraggio.
La mia ipotesi è corretta? Se è così, perché (o meglio quando ) dovrei usare stream()allora?
new String[]{…}qui. Basta usareArrays.asList("my/path/one", "my/path/two")
String[], non è necessario chiamare Arrays.asList. Puoi semplicemente eseguire lo streaming sull'array usando Arrays.stream(array). A proposito, ho difficoltà a capire del tutto lo scopo del isExcludedtest. È davvero interessante se un elemento di EXCLUDE_PATHSè contenuto letteralmente da qualche parte all'interno di path? Cioè isExcluded("my/path/one/foo/bar/baz")torneremo true, così come isExcluded("foo/bar/baz/my/path/one/")...
Arrays.streammetodo, grazie per averlo fatto notare. In effetti, l'esempio che ho postato sembra abbastanza inutile per chiunque altro oltre a me. Sono consapevole del comportamento del isExcludedmetodo, ma in realtà è solo qualcosa di cui ho bisogno per me stesso, quindi, per rispondere alla tua domanda: sì , è interessante per ragioni che vorrei non menzionare, in quanto non rientrerebbe nello scopo della domanda originale.
toLowerCaseapplicata alla costante che è già minuscola? Non dovrebbe essere applicato pathall'argomento?