在Java 8中将数组转换为具有特定范围的列表

man*_*ani 11 java java-8

我想将一个字符串数组转换为具有特定范围的列表.就我而言,我总是希望从索引1到最后一个索引.我不需要列表中包含的索引0值.有没有直接的方法可以用来过滤和转换到我需要的列表?

public class test1 {

    public static void main(String[] args) {
        String[] optArr = {"start", "map1", "map2", "map3"};
        List<String> list = Arrays.stream(optArr).collect(Collectors.toList());
        System.out.println(list);
    }
}
Run Code Online (Sandbox Code Playgroud)

Nam*_*man 18

您还可以使用重载方法Arrays.stream?(T[] array, int startInclusive, int endExclusive):

List<String> list = Arrays.stream(optArr, 1, optArr.length)
                          .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

返回指定数组的指定范围作为其源的顺序Stream .


或者(非Java-8),使用subList是一个选项,但我更喜欢在一行中链接它而不是创建一个新对象:

List<String> list = Arrays.asList(optArr).subList(1, optArr.length);
Run Code Online (Sandbox Code Playgroud)

  • `asList` +`subList`的优点是不必分配全新的列表.该数组用作列表的后备存储,而不是被复制. (6认同)

Rob*_*sen 15

你可以使用Stream.skip():

List<String> list = Arrays.stream(optArr).skip(1).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @nullpointer我想我们都可以安全地同意,对于给定的用例,你的答案是优越的.有一个upvote. (2认同)