
fi.evolver.utils.collection.JoinedList Maven / Gradle / Ivy
package fi.evolver.utils.collection;
import java.util.AbstractList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class JoinedList extends AbstractList {
private final List> lists;
private final int size;
public JoinedList(List> lists) {
this.lists = lists.stream().map(Collections::unmodifiableList).collect(Collectors.toList());
this.size = this.lists.stream().mapToInt(List::size).sum();
}
public JoinedList(List extends T> list1, List extends T> list2) {
this(Arrays.asList(list1, list2));
}
@Override
public T get(int index) {
int i = index;
for (List extends T> list: lists) {
if (i < list.size())
return list.get(i);
else
i -= list.size();
}
throw new IndexOutOfBoundsException("Index " + index + " out of bounds [0, " + i + ")");
}
@Override
public Stream stream() {
return lists.stream().flatMap(List::stream);
}
@Override
public Iterator iterator() {
return stream().iterator();
}
@Override
public int size() {
return size;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy