Collection.stream (). filter (). forEach () è inefficiente rispetto a uno standard per ogni ciclo?

13

IntelliJ IDEA mi ha consigliato proprio ora di sostituire il seguente ciclo per ogni ciclo con una chiamata Java 8 "forEach":

    for (Object o : objects) {
        if (o instanceof SomeObject) {
            doSomething();
        }
    }

La chiamata consigliata dovrebbe essere come questa:

objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());

A meno che non abbia frainteso il modo in cui funziona la funzionalità di Stream, mi sembra che l'uso di stream sia un'operazione O (2n) anziché un'operazione O (n) per lo standard for-each loop.

    
posta agent154 07.05.2015 - 15:38
fonte

1 risposta

18

Gli stream Java non eseguono una iterazione attraverso la raccolta una volta per ogni istruzione, nonostante ciò che implica la sintassi. Applica l'intera catena a ciascun elemento, un elemento alla volta.

Nel tuo caso, lo stream funzionerebbe esattamente come il ciclo. Prendi un elemento, confrontalo con il tuo predicato, quindi applica l'operazione, quindi passa all'elemento successivo.

    
risposta data 07.05.2015 - 16:53
fonte

Leggi altre domande sui tag