Skip to content

Instantly share code, notes, and snippets.

@AugustNagro
Last active February 23, 2019 22:23
Show Gist options
  • Save AugustNagro/e66a0ddf7d47b4f11fec8760281bb538 to your computer and use it in GitHub Desktop.
Save AugustNagro/e66a0ddf7d47b4f11fec8760281bb538 to your computer and use it in GitHub Desktop.
public static interface ReadOnlySpliterator {
int characteristics();
long estimateSize();
long getExactSizeIfKnown();
boolean hasCharacteristics(int characteristics);
}
public static <T> Collector<T, ?, List<T>> toList(ReadOnlySpliterator spliterator) {
Supplier<List<T>> supplier;
if (!spliterator.hasCharacteristics(Spliterator.CONCURRENT) &&
spliterator.hasCharacteristics(Spliterator.SIZED)) {
int size = (int) spliterator.getExactSizeIfKnown();
supplier = () -> new ArrayList<>(size);
} else {
supplier = ArrayList::new;
}
return Collector.of(supplier, List::add,
(left, right) -> { left.addAll(right); return left; });
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment