usar titledborder setborder definicion codigo java java-8 java-stream

setborder - titledborder java



¿Cómo asegurar el orden de procesamiento en las secuencias java8? (1)

Estás haciendo la pregunta equivocada. Está preguntando sobre sequential frente a parallel mientras que desea procesar los artículos en orden , por lo que debe preguntar sobre el pedido . Si tiene una secuencia ordenada y realiza operaciones que garantizan mantener la orden, no importa si la secuencia se procesa en paralelo o secuencial; La implementación mantendrá el orden.

La propiedad ordenada es distinta de paralela versus secuencial. Por ejemplo, si llama a stream() en un HashSet el flujo se desordenará al llamar a stream() en una List devuelve un flujo ordenado. Tenga en cuenta que puede llamar a unordered() para liberar el contrato de pedido y potencialmente aumentar el rendimiento. Una vez que la secuencia no tiene orden, no hay forma de restablecer el orden. (La única forma de convertir una secuencia desordenada en ordenada es llamar sorted , sin embargo, el orden resultante no es necesariamente el orden original).

Consulte también la sección "Pedidos" de la documentación del paquete java.util.stream .

Para garantizar el mantenimiento del pedido a lo largo de una operación de flujo completo, debe estudiar la documentación de la fuente del flujo, todas las operaciones intermedias y la operación del terminal para saber si mantienen el pedido o no (o si la fuente tiene un pedido en el primer sitio).

Esto puede ser muy sutil, por ejemplo, Stream.iterate(T,UnaryOperator) crea una secuencia ordenada mientras Stream.generate(Supplier) crea una secuencia no ordenada . Tenga en cuenta que también cometió un error común en su pregunta, ya que forEach no mantiene el orden. forEachOrdered usar forEachOrdered si desea procesar los elementos de la secuencia en un orden garantizado.

Entonces, si su list en su pregunta es de hecho una java.util.List , su método stream() devolverá una secuencia ordenada y el filter no cambiará el orden. Entonces, si llama a list.stream().filter() .forEachOrdered() , todos los elementos se procesarán secuencialmente en orden, mientras que para list.parallelStream().filter().forEachOrdered() los elementos podrían procesarse en paralelo ( por ejemplo, por el filtro), pero la acción de la terminal todavía se llamará en orden (lo que obviamente reducirá el beneficio de la ejecución paralela).

Si, por ejemplo, usa una operación como

List<…> result=inputList.parallelStream().map(…).filter(…).collect(Collectors.toList());

toda la operación podría beneficiarse de la ejecución paralela, pero la lista resultante siempre estará en el orden correcto, independientemente de si usa una secuencia paralela o secuencial.

Quiero procesar listas dentro de un objeto java XML . Tengo que asegurarme de procesar todos los elementos para poder recibirlos.

¿Por lo tanto, debo llamar sequential en cada stream que uso? list.stream().sequential().filter().forEach()

¿O es suficiente usar la secuencia siempre que no use el paralelismo? list.stream().filter().forEach()