reversión de Java 8 Streams
en Java 8, las transmisiones proporcionan una forma poderosa y concisa de manipular y procesar datos. Una operación común es revertir una transmisión. Este artículo explora dos métodos para lograr esto: una solución específica para revertir un enfoque intStream y genérico para revertir cualquier flujo de objetos.
INTSTREAM INTSTREAM REVERSAL
para revertir Un intstream, se puede crear un método personalizado para mapear el rango de valores en orden inverso. Por ejemplo, si tenemos un intstream que varía de -5 a 0, invertirlo resultaría en el flujo de 0 a -5. Esto se puede lograr usando el siguiente código:
static IntStream revRange(int from, int to) { return IntStream.range(from, to) .map(i -> to - i from - 1); }
Este método evita el boxeo y la clasificación, lo que resulta en una solución más eficiente.
genérico de reversión
para revertir flujos de cualquier tipo de objeto, Se pueden usar dos enfoques. El primero implica almacenar los elementos de transmisión en una matriz y leerlos en orden inverso:
@SuppressWarnings("unchecked") staticStream reverse(Stream input) { Object[] temp = input.toArray(); return (Stream ) IntStream.range(0, temp.length) .mapToObj(i -> temp[temp.length - i - 1]); }
Este enfoque es sencillo pero requiere la creación de una matriz intermedia.
Otra técnica es usar coleccionistas para acumular los elementos en una lista invertida:
Streaminput = ... ; List output = input.collect(ArrayList::new, (list, e) -> list.add(0, e), (list1, list2) -> list1.addAll(0, list2));
Esta opción también requiere almacenar los elementos de flujo, pero elimina la necesidad de copiar usando una lista de matrices con una inserción en el frente.
Vale la pena señalar que no hay una forma "adecuada" de revertir una transmisión sin almacenar los elementos. Sin embargo, los métodos presentados proporcionan soluciones eficientes y versátiles tanto para la inversión intstream específica como para la reversión de la corriente genérica.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3