Cuando se trabaja con estructuras de datos, a menudo surge la necesidad de manipular y procesar datos de diferentes maneras. Un escenario común es la conversión de un Iterador, una colección secuencial de elementos, en una Corriente, un proceso de procesamiento de datos más versátil y potente.
Para lograr esta conversión de manera efectiva, es esencial evitar la creación de copias de los datos. . Esto es ineficiente e innecesario, especialmente cuando se trata de grandes conjuntos de datos.
Un enfoque es utilizar la clase StreamSupport. Proporciona métodos para crear una secuencia desde un Iterable o Spliterator. En este caso, podemos crear un Spliterator a partir del Iterator usando Spliterators.sliteratorUnknownSize(). Aquí hay un ejemplo:
Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream targetStream = StreamSupport.stream(
Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
false);
Otra opción implica crear un Iterable a partir del Iterador. Iterable es una interfaz funcional y con lambdas podemos crear fácilmente un Iterable a partir de un Iterador:
Iterable iterable = () -> sourceIterator;
Stream targetStream = StreamSupport.stream(iterable.spliterator(), false);
Podría decirse que este enfoque es más legible, ya que utiliza el diseño de interfaz funcional. Al evitar copias innecesarias, puede procesar sus datos de manera eficiente mientras mantiene el rendimiento y la claridad del código.
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