Благодаря предложению Джерри Коффина, вот решение на Java для тех, кто заинтересован:
import java.util.List;
import java.util.AbstractList;
import java.util.Arrays;
public class ExtendedSubList<E> extends AbstractList<E>
{
protected final List<E> parent;
protected final int[] indices;
public static <E> List<E> subList(final List<E> parent, int ... indices)
{
if (parent == null)
throw new IllegalArgumentException("parent == null");
if (indices == null)
throw new IllegalArgumentException("indices == null");
for (int i = 0; i < indices.length; i++)
if (!(0 <= indices[i] && indices[i] < parent.size()))
throw new IllegalArgumentException(String.format("index %d (at position %d) is not in bounds", indices[i], i));
Arrays.sort(indices);
return new ExtendedSubList(parent, indices);
}
protected ExtendedSubList(List<E> parent, int[] indices)
{
this.parent = parent;
this.indices = indices;
}
public E get(int index)
{
return parent.get(indices[index]);
}
public int size()
{
return indices.length;
}
public E set(int index, E element)
{
return parent.set(indices[index], element);
}
}
Пример использования:
List<Integer> list = Arrays.asList(2, 1, 4, 6, 3, 7);
Collections.sort(ExtendedSubList.subList(list), 1, 2, 4);
В результате получается список: [2, 1, 3, 6, 4, 7]
.