从索引创建子列表

dra*_*on7 2 java list sublist java-8 java-stream

是否可以仅使用元素索引从另一个列表创建子列表?我正在寻找一个很好的解决方案,例如lambdas,来自Java 8的流.

例如(伪代码):

a = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
b = a.getByIndices([0, 2, 4, 5, 3])
print(b) // [10, 8, 6, 5, 7]
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 8

您可以使用以下方法:

private static <T> List<T> getByIndices(List<T> list, List<Integer> indexes) {
    return indexes.stream().map(list::get).collect(toList());
}
Run Code Online (Sandbox Code Playgroud)

Stream将从给定的索引创建一个映射到索引处的列表元素,并将结果收集到列表中.

样品用法:

List<Integer> list = Arrays.asList(10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
List<Integer> indexes = Arrays.asList(0, 2, 4, 5, 3);
System.out.println(getByIndices(list, indexes)); // prints [10, 8, 7, 6, 5]
Run Code Online (Sandbox Code Playgroud)


ass*_*ias 6

对于整数数组,您可以使用:

int[] b = IntStream.of(0, 2, 4, 5, 3)
      .map(i -> a[i])
      .toArray();
Run Code Online (Sandbox Code Playgroud)