从Java中的List创建子列表,它不是一个连续的范围

时间:2016-05-09 14:47:24

标签: java list collections sublist

假设我有代码:

List<String> list = new ArrayList<String>();
list.add("A");  //want
list.add("B");
list.add("C");
list.add("D");  //want
list.add("E");  //want

我希望创建一个新列表,其中只包含元素&#34; A&#34;,&#34; D&#34;,E&#34;。

List类有一个方法subList,如果你只有1个连续范围,它会起作用,但如果你想要多个范围或多个离散元素怎么办?

java或库中是否有任何方法允许我执行以下操作:

List<String> subList = NeatListUtilities.subList(list, 0, 3, 4);

2 个答案:

答案 0 :(得分:2)

我不知道,但实施起来相当简单。

(没有错误/范围检查,假设使用ArrayList)

public static <T> List<T> subList(List<T> src, int... indices) {
    List<T> result = new ArrayList<>(indices.length);
    for(int i : indices) {
        result.add(src.get(i));
    }
    return result;
}

答案 1 :(得分:1)

使用Stream

执行所需操作的简明方法
List<String> subList = IntStream.of(0, 3, 4)
    .mapToObj(i -> list.get(i))
    .collect(Collectors.toList());

所以,可能你不需要一个库。