Leggendo un po 'su Java 8, ho ottenuto il post del blog this spiegando un po' di flussi e riduzione di essi e quando sarebbe stato possibile cortocircuitare la riduzione. In basso si legge:Java 8 stream in cortocircuito
Nota nel caso di
findFirst
ofindAny
abbiamo solo bisogno il primo valore che corrisponde al predicato (anche sefindAny
non è garantito per restituire la prima). Tuttavia, se lo stream non ha ordini, ci aspetteremmo chefindFirst
si comporti comefindAny
. Le operazioniallMatch
,noneMatch
eanyMatch
non possono cortocircuitare il flusso poiché potrebbe richiedere la valutazione di tutti i valori per determinare se l'operatore ètrue
ofalse
. Quindi un flusso infinito che utilizza questi non può terminare.
ottengo che findFirst
o findAny
può cortocircuitare la riduzione, perché non appena AF a trovare un elemento, non hai bisogno di elaborare ulteriormente qualsiasi.
Ma perché questo non sarebbe possibile per allMatch
, noneMatch
e anyMatch
? Per allMatch
, se ne trovi uno che non corrisponde al predicato, puoi interrompere l'elaborazione. Lo stesso per nessuno. E anyMatch
in particolare non ha senso per me, in quanto è praticamente uguale a findAny
(ad eccezione di ciò che viene restituito)?
Dire che questi tre non possono cortocircuitare, perché potrebbe richiedere la valutazione di tutti i valori, si potrebbe anche dire per findFirst/Any
.
C'è qualche differenza fondamentale che mi manca? Non capisco davvero cosa sta succedendo?
"non può" come in "potrebbe non", non come in "non consentito". – Andreas
@Andreas Sì, non sto ottenendo da dove viene la differenza. Tutto può essere cortocircuitato nel modo in cui lo sto guardando? – Koekje