All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fi.evolver.utils.collection.JoinedList Maven / Gradle / Ivy

There is a newer version: 3.5.0
Show newest version
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 list1, List list2) {
		this(Arrays.asList(list1, list2));
	}


	@Override
	public T get(int index) {
		int i = index;
		for (List 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