Java flux de carte et de recueillir de l'ordre de conteneur
List<MyObject> myList = new ArrayList<>();
//populate myList here
List<String> nameList = myList.stream()
.map(MyObject::getName)
.collect(Collectors.toList());
Dans le code ci-dessus, puis-je s'attendre à ce que l'ordre de MyObject
noms dans nameList
est toujours le même que l'ordre de myList
?
InformationsquelleAutor Lahiru Chandima | 2015-05-15
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez vous attendre à cela, même si vous êtes en utilisant en parallèle flux tant que vous n'avez pas explicitement de le convertir en
non ordonnée()
mode.La commande ne change jamais dans le mode séquentiel, mais peut être modifié en mode parallèle. Le flux devient non ordonnée soit:
unordered()
appelHashSet
stream n'est pas ordonné que la commande est dépendant de l'implémentation et vous ne pouvez pas compter sur elle)forEach()
fonctionnement ou de la collecte de non ordonnée collectionneur commetoSet()
)Dans votre cas, aucune de ces conditions sont respectées, ainsi que votre flux est commandé.
list.stream().parallel().map(i)...
qui permettraient de préserver le flux de commande.