org.elasticsearch.common.util.iterable.Iterables Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch - Open Source, Distributed, RESTful Search Engine
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.common.util.iterable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;
import java.util.stream.StreamSupport;
public class Iterables {
/** Flattens the two level {@code Iterable} into a single {@code Iterable}. Note that this pre-caches the values from the outer {@code
* Iterable}, but not the values from the inner one. */
public static Iterable flatten(Iterable extends Iterable> inputs) {
Objects.requireNonNull(inputs);
return new FlattenedIterables<>(inputs);
}
static class FlattenedIterables implements Iterable {
private final Iterable extends Iterable> inputs;
FlattenedIterables(Iterable extends Iterable> inputs) {
List> list = new ArrayList<>();
for (Iterable iterable : inputs) {
list.add(iterable);
}
this.inputs = list;
}
@Override
public Iterator iterator() {
return StreamSupport.stream(inputs.spliterator(), false).flatMap(s -> StreamSupport.stream(s.spliterator(), false)).iterator();
}
}
public static T get(Iterable iterable, int position) {
Objects.requireNonNull(iterable);
if (position < 0) {
throw new IllegalArgumentException("position >= 0");
}
if (iterable instanceof List list) {
if (position >= list.size()) {
throw new IndexOutOfBoundsException(Integer.toString(position));
}
return list.get(position);
} else {
Iterator it = iterable.iterator();
for (int index = 0; index < position; index++) {
if (it.hasNext() == false) {
throw new IndexOutOfBoundsException(Integer.toString(position));
}
it.next();
}
if (it.hasNext() == false) {
throw new IndexOutOfBoundsException(Integer.toString(position));
}
return it.next();
}
}
public static int indexOf(Iterable iterable, Predicate predicate) {
int i = 0;
for (T element : iterable) {
if (predicate.test(element)) {
return i;
}
i++;
}
return -1;
}
public static long size(Iterable> iterable) {
return StreamSupport.stream(iterable.spliterator(), true).count();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy