Convertir un iterador en una secuencia sin copiar
Convertir un iterador directamente en una secuencia sin crear una copia intermedia es una operación deseable por razones de rendimiento. Aquí hay dos métodos efectivos para lograr esta conversión:
Método 1: usar Spliterator
Cree un Spliterator a partir del Iterator usando la clase Spliterators y utilícelo como base para la secuencia:
Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream targetStream = StreamSupport.stream(
Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
false);
Método 2: usar Iterable
Cree un Iterable a partir del Iterador usando una expresión lambda. Iterable es una interfaz funcional que hace que esta conversión sea sencilla:
Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();
Iterable iterable = () -> sourceIterator;
Stream targetStream = StreamSupport.stream(iterable.spliterator(), false);
La clave para evitar una copia en ambos métodos es que utilizan la clase StreamSupport, que le permite crear un Stream directamente desde un Spliterator o Iterable sin manipulación de colección intermedia.
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