2016-12-28 5 views
2

je fais le cours API Stream Oracle Java 1.8 et je suis tombé sur ce tout en lisant attentivement les notes de cours:Comment "non ordonnée" aide "distincte()" et "groupingBy"

non ordonnée():

- Hérité de BaseStream

- Retourne un flux qui est non ordonnée (utilisé en interne)

- peut améliorer l'efficacité des opérations comme distinctes() et groupingBy()

Voici ma question. Comment la propriété d'être désordonné peut conduire à un calcul plus efficace de distinct() et groupingBy()

Répondre

3

Elle n'a de signification que dans le cas de flux parallèles. En cas de flux parallèles ordonnées, l'opération distinct() doit faire un travail supplémentaire afin de maintenir sa stabilité garantie, qui est,

pour les éléments dupliqués, l'élément qui apparaît en premier dans la rencontre ordre est conservé

(voir l'API Rem dans le javadoc for Stream.distinct().

en cas de flux parallèles désordonnées, aucune garantie doit être maintenu, car le flux est déjà non ordonnée. de cette façon, en supprimant la caractéristique ordonnée d'un paralle commandé l flux peut grandement améliorer les performances de l'opération distinct(). De même, pour l'opération groupingBy(), lever l'exigence que l'ordre de flux doit être préservé peut grandement améliorer l'efficacité de l'opération dans le cas de flux parallèles puisque la réduction elle-même peut être effectuée simultanément. Notez que cela se produit uniquement lors de la collecte à partir de flux parallèles avec des collecteurs concurrents, le collecteur ou le flux lui-même étant non ordonné. Pratiquement, vous devrez utiliser Stream.collect(groupingByConcurrent(..)) au lieu de Stream.collect(groupingBy(..)). Voir le javadoc pour Stream.collect() et Collector pour plus de détails.