Java : Spliterator con ejemplos
Spliterator (Java SE 23 & JDK 23) en Java con ejemplos.
Encontrará muestras de código para la mayoría de los métodos Spliterator<T>.
Nota :
- Este artículo puede utilizar software de traducción para su comodidad. Consulte también la versión original en inglés.
Summary
Un objeto para recorrer y dividir elementos de una fuente. La fuente de elementos abarcada por un divisor puede ser, por ejemplo, una matriz, una colección, un canal de E/S o una función generadora. (Traducción automática)
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
System.out.println(list.size()); // 3
final var spliterator = list.spliterator();
System.out.println("-- forEachRemaining --");
spliterator.forEachRemaining(s -> {
System.out.println(s);
});
// Result
// ↓
//-- forEachRemaining --
//aaa
//bbb
//ccc
final var list = List.of("a", "b", "c", "d", "e");
System.out.println(list); // [a, b, c, d, e]
System.out.println(list.size()); // 5
final var s1 = list.spliterator();
System.out.println("s1 size : " + s1.estimateSize()); // s1 size : 5
final var s2 = s1.trySplit();
System.out.println("s1 size : " + s1.estimateSize()); // s1 size : 3
System.out.println("s2 size : " + s2.estimateSize()); // s2 size : 2
System.out.println("-- s1 --");
s1.forEachRemaining(System.out::println);
// Result
// ↓
//-- s1 --
//c
//d
//e
System.out.println("-- s2 --");
s2.forEachRemaining(System.out::println);
// Result
// ↓
//-- s2 --
//a
//b
Fields
static final int CONCURRENT
Valor característico que significa que la fuente del elemento puede ser modificada de forma segura y simultánea (permitiendo adiciones, reemplazos y/o eliminaciones) por múltiples subprocesos sin sincronización externa. (Traducción automática)
final var queue = new ConcurrentLinkedQueue<String>();
queue.add("a");
queue.add("b");
final var spliterator = queue.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x1110
System.out.printf("CONCURRENT : 0x%x%n", Spliterator.CONCURRENT); // CONCURRENT : 0x1000
System.out.printf("NONNULL : 0x%x%n", Spliterator.NONNULL); // NONNULL : 0x100
System.out.printf("ORDERED : 0x%x%n", Spliterator.ORDERED); // ORDERED : 0x10
static final int DISTINCT
Valor característico que significa que, para cada par de elementos encontrados x, y, !x.equals(y). (Traducción automática)
final var set = new HashSet<String>();
set.add("a");
set.add("b");
final var spliterator = set.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x41
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("DISTINCT : 0x%x%n", Spliterator.DISTINCT); // DISTINCT : 0x1
static final int IMMUTABLE
Valor característico que significa que la fuente del elemento no se puede modificar estructuralmente; es decir, no se pueden agregar, reemplazar ni eliminar elementos, por lo que dichos cambios no pueden ocurrir durante el recorrido. (Traducción automática)
final var list = new CopyOnWriteArrayList<String>();
list.add("a");
list.add("b");
final var spliterator = list.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x4450
System.out.printf("SUBSIZED : 0x%x%n", Spliterator.SUBSIZED); // SUBSIZED : 0x4000
System.out.printf("IMMUTABLE : 0x%x%n", Spliterator.IMMUTABLE); // IMMUTABLE : 0x400
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("ORDERED : 0x%x%n", Spliterator.ORDERED); // ORDERED : 0x10
static final int NONNULL
Valor característico que significa que la fuente garantiza que los elementos encontrados no serán nulos. (Traducción automática)
final var deque = new ArrayDeque<String>();
deque.add("a");
deque.add("b");
//deque.add(null); // NullPointerException
final var spliterator = deque.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x4150
System.out.printf("SUBSIZED : 0x%x%n", Spliterator.SUBSIZED); // SUBSIZED : 0x4000
System.out.printf("NONNULL : 0x%x%n", Spliterator.NONNULL); // NONNULL : 0x100
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("ORDERED : 0x%x%n", Spliterator.ORDERED); // ORDERED : 0x10
static final int ORDERED
Valor característico que significa que se define un orden de encuentro para los elementos. (Traducción automática)
final var list = new ArrayList<String>();
list.add("a");
list.add("b");
final var spliterator = list.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x4050
System.out.printf("SUBSIZED : 0x%x%n", Spliterator.SUBSIZED); // SUBSIZED : 0x4000
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("ORDERED : 0x%x%n", Spliterator.ORDERED); // ORDERED : 0x10
static final int SIZED
Valor característico que significa que el valor devuelto por estimateSize() antes del recorrido o división representa un tamaño finito que, en ausencia de modificación de la fuente estructural, representa un recuento exacto de la cantidad de elementos que se encontrarían en un recorrido completo. (Traducción automática)
final var list = new ArrayList<String>();
list.add("a");
list.add("b");
final var spliterator = list.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x4050
System.out.printf("SUBSIZED : 0x%x%n", Spliterator.SUBSIZED); // SUBSIZED : 0x4000
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("ORDERED : 0x%x%n", Spliterator.ORDERED); // ORDERED : 0x10
static final int SORTED
Valor característico que significa que el orden de encuentro sigue un orden de clasificación definido. (Traducción automática)
final var set = new TreeSet<String>();
set.add("a");
set.add("b");
final var spliterator = set.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x55
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("ORDERED : 0x%x%n", Spliterator.ORDERED); // ORDERED : 0x10
System.out.printf("SORTED : 0x%x%n", Spliterator.SORTED); // SORTED : 0x4
System.out.printf("DISTINCT : 0x%x%n", Spliterator.DISTINCT); // DISTINCT : 0x1
static final int SUBSIZED
Valor característico que significa que todos los divisores resultantes de trySplit() serán tanto SIZED como SUBSIZED. (Traducción automática)
final var list = new ArrayList<String>();
list.add("a");
list.add("b");
final var spliterator = list.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x4050
System.out.printf("SUBSIZED : 0x%x%n", Spliterator.SUBSIZED); // SUBSIZED : 0x4000
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("ORDERED : 0x%x%n", Spliterator.ORDERED); // ORDERED : 0x10
Methods
int characteristics ()
Devuelve un conjunto de características de este Spliterator y sus elementos. (Traducción automática)
final var set = new HashSet<String>();
set.add("a");
set.add("b");
final var spliterator = set.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x41
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("DISTINCT : 0x%x%n", Spliterator.DISTINCT); // DISTINCT : 0x1
System.out.println(spliterator.hasCharacteristics(Spliterator.SIZED)); // true
System.out.println(spliterator.hasCharacteristics(Spliterator.DISTINCT)); // true
System.out.println(spliterator.hasCharacteristics(Spliterator.ORDERED)); // false
long estimateSize ()
Devuelve una estimación de la cantidad de elementos que se encontrarían en un recorrido forEachRemaining(java.util.function.Consumer<? super T>), o devuelve Long.MAX_VALUE si es infinito, desconocido o demasiado costoso de calcular. (Traducción automática)
final var list = List.of("a", "b", "c", "d", "e");
System.out.println(list); // [a, b, c, d, e]
System.out.println(list.size()); // 5
final var spliterator = list.spliterator();
System.out.println(spliterator.estimateSize()); // 5
System.out.println(spliterator.getExactSizeIfKnown()); // 5
final var queue = new ConcurrentLinkedQueue<String>();
queue.add("a");
queue.add("b");
queue.add("c");
System.out.println(queue); // [a, b, c]
System.out.println(queue.size()); // 3
final var spliterator = queue.spliterator();
System.out.println(spliterator.estimateSize() == Long.MAX_VALUE); // true
System.out.println(spliterator.getExactSizeIfKnown()); // -1
default void forEachRemaining (Consumer<? super T> action)
Realiza la acción dada para cada elemento restante, secuencialmente en el hilo actual, hasta que se hayan procesado todos los elementos o la acción arroje una excepción. (Traducción automática)
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
System.out.println(list.size()); // 3
final var spliterator = list.spliterator();
System.out.println("-- forEachRemaining --");
spliterator.forEachRemaining(s -> {
System.out.println(s);
});
// Result
// ↓
//-- forEachRemaining --
//aaa
//bbb
//ccc
default Comparator<? super T> getComparator ()
Si la fuente de este divisor está ORDENADA por un comparador, devuelve ese comparador. (Traducción automática)
final var set = new TreeSet<String>();
set.add("c");
set.add("d");
set.add("a");
set.add("b");
System.out.println(set); // [a, b, c, d]
final var spliterator = set.spliterator();
final var comparator = spliterator.getComparator();
System.out.println(comparator); // null
final Comparator<String> reverse = Comparator.reverseOrder();
final var set = new TreeSet<>(reverse);
set.add("c");
set.add("d");
set.add("a");
set.add("b");
System.out.println(set); // [d, c, b, a]
final var spliterator = set.spliterator();
final var comparator = spliterator.getComparator();
System.out.println(comparator == reverse); // true
final var list = List.of("a", "b", "c");
System.out.println(list); // [a, b, c]
final var spliterator = list.spliterator();
try {
var _ = spliterator.getComparator();
} catch (IllegalStateException e) {
System.out.println("IllegalStateException!");
}
// Result
// ↓
//IllegalStateException!
default long getExactSizeIfKnown ()
Método de conveniencia que devuelve estimateSize() si este Spliterator es SIZED, de lo contrario -1. (Traducción automática)
final var list = List.of("a", "b", "c", "d", "e");
System.out.println(list); // [a, b, c, d, e]
System.out.println(list.size()); // 5
final var spliterator = list.spliterator();
System.out.println(spliterator.estimateSize()); // 5
System.out.println(spliterator.getExactSizeIfKnown()); // 5
final var queue = new ConcurrentLinkedQueue<String>();
queue.add("a");
queue.add("b");
queue.add("c");
System.out.println(queue); // [a, b, c]
System.out.println(queue.size()); // 3
final var spliterator = queue.spliterator();
System.out.println(spliterator.estimateSize() == Long.MAX_VALUE); // true
System.out.println(spliterator.getExactSizeIfKnown()); // -1
default boolean hasCharacteristics (int characteristics)
Devuelve verdadero si las características() de este Spliterator contienen todas las características dadas. (Traducción automática)
final var set = new HashSet<String>();
set.add("a");
set.add("b");
final var spliterator = set.spliterator();
System.out.printf("0x%x%n", spliterator.characteristics()); // 0x41
System.out.printf("SIZED : 0x%x%n", Spliterator.SIZED); // SIZED : 0x40
System.out.printf("DISTINCT : 0x%x%n", Spliterator.DISTINCT); // DISTINCT : 0x1
System.out.println(spliterator.hasCharacteristics(Spliterator.SIZED)); // true
System.out.println(spliterator.hasCharacteristics(Spliterator.DISTINCT)); // true
System.out.println(spliterator.hasCharacteristics(Spliterator.ORDERED)); // false
boolean tryAdvance (Consumer<? super T> action)
Si existe un elemento restante: realiza la acción dada sobre él y devuelve verdadero; de lo contrario, devuelve falso. (Traducción automática)
final var list = List.of("aaa", "bbb", "ccc");
final var spliterator = list.spliterator();
System.out.println("-- tryAdvance --");
final var ret1 = spliterator.tryAdvance(System.out::println);
System.out.println("ret : " + ret1);
System.out.println("-- tryAdvance --");
final var ret2 = spliterator.tryAdvance(System.out::println);
System.out.println("ret : " + ret2);
System.out.println("-- tryAdvance --");
final var ret3 = spliterator.tryAdvance(System.out::println);
System.out.println("ret : " + ret3);
System.out.println("-- tryAdvance --");
final var ret4 = spliterator.tryAdvance(System.out::println);
System.out.println("ret : " + ret4);
// Result
// ↓
//-- tryAdvance --
//aaa
//ret : true
//-- tryAdvance --
//bbb
//ret : true
//-- tryAdvance --
//ccc
//ret : true
//-- tryAdvance --
//ret : false
Spliterator<T> trySplit ()
Si este divisor se puede particionar, devuelve un divisor que cubre los elementos que, al regresar de este método, no estarán cubiertos por este divisor. (Traducción automática)
final var list = List.of("a", "b", "c", "d", "e");
System.out.println(list); // [a, b, c, d, e]
System.out.println(list.size()); // 5
final var s1 = list.spliterator();
System.out.println("s1 size : " + s1.estimateSize()); // s1 size : 5
final var s2 = s1.trySplit();
System.out.println("s1 size : " + s1.estimateSize()); // s1 size : 3
System.out.println("s2 size : " + s2.estimateSize()); // s2 size : 2
System.out.println("-- s1 --");
s1.forEachRemaining(System.out::println);
// Result
// ↓
//-- s1 --
//c
//d
//e
System.out.println("-- s2 --");
s2.forEachRemaining(System.out::println);
// Result
// ↓
//-- s2 --
//a
//b
Related posts
- Ejemplos de API