Pregunta Mapa de flujo de Java y recoger: orden del contenedor resultante


List<MyObject> myList = new ArrayList<>(); 
//populate myList here

List<String> nameList = myList.stream()
        .map(MyObject::getName)
        .collect(Collectors.toList());

En el código anterior, ¿puedo esperar ese orden de MyObject nombres en nameList siempre es lo mismo que el orden de myList?


32
2018-05-15 11:38


origen


Respuestas:


Sí, puede esperar esto incluso si está utilizando transmisión en paralelo siempre y cuando no la haya convertido explícitamente en unordered() modo.

El orden nunca cambia en modo secuencial, pero puede cambiar en modo paralelo. La secuencia se desordena o bien:

  • Si lo convierte explícitamente en modo desordenado a través de unordered() llamada
  • Si la fuente de la corriente informa que está desordenada (por ejemplo, HashSet el flujo no está ordenado ya que el orden depende de la implementación y no puede confiar en él)
  • Si está utilizando una operación de terminal no ordenada (por ejemplo, forEach() operación o recolección a coleccionista desordenado como toSet())

En tu caso, ninguna de estas condiciones se cumplió, por lo tanto, tu transmisión está ordenada.


41
2018-05-15 11:42