Dalla documentazione di Spliterator
:
Uno Spliterator riporta anche una serie di characteristics()
della sua struttura, fonte, e gli elementi tra ORDERED
, DISTINCT
, SORTED
, SIZED
, NONNULL
, IMMUTABLE
, CONCURRENT
e SUBSIZED
. Questi possono essere impiegati dai client Spliterator per controllare, specializzare o semplificare il calcolo.
Si noti che lo fa non parlare della prevenzione del NullPointerException
s. Se si ordina uno Stream
che potrebbe contenere valori è è la responsabilità di fornire un Comparator
che può gestire null
s.
La seconda frase indica chiaramente che l'utilizzo di questi flag è solo un'opzione, non un requisito per "Client Spliterator", che non è limitato all'utilizzo da parte di Stream
s.
Quindi, indipendentemente dal fatto che sia utilizzato dalla corrente attuazione del Stream
API, ci sono possibilità di ottenere un vantaggio della conoscenza di un NONULL
caratteristica?
Penso di sì. Un'implementazione può diramarsi a un codice specializzato per un valore non null
Spliterator
per utilizzare null
per rappresentare un determinato stato quindi, ad es. valori assenti o il valore iniziale prima dell'elaborazione del primo elemento, ecc. Se in effetti, il codice di implementazione effettivo per la gestione di Stream
s che può contenere null
è complicato. Ma ovviamente devi sempre valutare se la semplificazione di un caso giustifica la duplicazione del codice.
Ma a volte la semplificazione è così semplice come sapere che non ci sono null
valori implica che è possibile utilizzare uno dei Concurrent…
collezioni, che non consentono null
s, internamente.
Hmmwait ... Non ci sono 'Stream 'i client principali qui? Probabilmente ho una mentalità troppo ristretta, ma non vedo quali altri clienti potresti escogitare. Certo, puoi implementare il tuo (l'ho fatto), ma a parte usarlo in un 'Stream' ... – fge
Non è" puoi implementare il tuo "un punto di forza, se non * il punto * di Java API, che ti supporta per scrivere la tua applicazione anziché fornire applicazioni complete? Oltre a ciò, 'Stream's sono i client principali, sì, ma ciò non è limitato all'implementazione * * * di' Stream's. Aggiungere una nuova caratteristica in una versione futura richiederebbe una versione maggiore, ma aggiungere un'implementazione che renda (migliore) l'uso di una bandiera già esistente può accadere in ogni piccolo aggiornamento. Quindi è una strategia ragionevole aggiungere bandiere con valore potenziale il prima possibile. – Holger
Sì, sono d'accordo che è un punto di forza; Immagino di non essere abbastanza informato sulle decisioni di progettazione che stanno dietro: / – fge