Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java 8中将数组转换为具有特定范围的列表_Java_Java 8 - Fatal编程技术网

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

在Java 8中将数组转换为具有特定范围的列表,java,java-8,Java,Java 8,我想将一个字符串数组转换为具有特定范围的列表。在我的例子中,我总是希望从索引1到最后一个索引。我不需要列表中包含索引0值。是否有任何直接的方法,我可以使用过滤和转换为我需要的列表 public class test1 { public static void main(String[] args) { String[] optArr = {"start", "map1", "map2", "map3"}; List<String> list

我想将一个字符串数组转换为具有特定范围的列表。在我的例子中,我总是希望从索引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);
    }
}
公共类test1{
公共静态void main(字符串[]args){
字符串[]optArr={“start”、“map1”、“map2”、“map3”};
List=Arrays.stream(optar.collect)(Collectors.toList());
系统输出打印项次(列表);
}
}
您可以使用:

List List=Arrays.stream(optar).skip(1).collect(Collectors.toList());

一个非Java 8选项可能是在当前列表的顶部创建一个视图,该视图省略了第一个元素:

List<String> list = Arrays.stream(optArr).collect(Collectors.toList());
List<String> viewList = list.subList(1, list.size());
List List=Arrays.stream(optar.collect)(Collectors.toList());
List viewList=List.subList(1,List.size());

这意味着,虽然底层数据结构仍然是原始列表,但内存中的一个额外元素似乎不是一个很大的惩罚。

您也可以使用重载方法,如下所示:

List List=Arrays.stream(optar).skip(1).collect(Collectors.toList());
我想它一定有用


参见这里的文档:

< P>查看你的数据,你可以考虑:

List<String> list = Stream.of(optArr).filter(s -> s.startsWith("map")).collect(toList());
List List=Stream.of(optar).filter(s->s.startsWith(“map”)).collect(toList());
但是,如果您只想筛选第一个索引
子列表
,那么这是一个不错的选择。
您不需要在任何地方使用流。

一种方法使用
List.sublist(int,int)


应该是这样的

List<String> al = new ArrayList<>(Arrays.asList(optArr));
List actualList = list.subList(1, al.size());
List al=newarraylist(Arrays.asList(optar));
List actualList=List.subList(1,al.size());

您还可以使用
数组.copyOfRange
复制数组

将指定数组的指定范围复制到新数组中。范围(从)的初始索引必须介于零和original.length(包括)之间

IntStream:另一种方法是使用
IntStream

List<String> list = Arrays.stream(optArr)
    .skip(1)
    .collect(Collectors.toList());
System.out.println(list);
List<String> result = IntStream.range(1, optArr.length).mapToObj(i->optArr[i]).collect(Collectors.toList());
List result=IntStream.range(1,optar.length).mapToObj(i->optar[i]).collect(Collectors.toList());

为什么需要使用流?为什么像
for loop
s这样的古老魔法不足以完成这项任务

String[] optArr = {"start", "map1", "map2", "map3"};
final List<String> list = new ArrayList<>();

for (int i = 1; i < optArr.length; i++) // skip first element
    list.add(optArr[i]);
String[]optArr={“start”、“map1”、“map2”、“map3”};
最终列表=新的ArrayList();
for(int i=1;i

作业最简单的工具。

ArrayList类有一个方法,可以用来分割列表。旁白:重命名类/变量以遵循正确的命名约定,并具有有意义的名称。e、 g.
ArrayToListConversionTest
也是一个更好的名称。基本上,到目前为止,所有的答案(除了)都在浪费时间和空间。(字面意思——我的意思是,在网站上,以及在实施时)。假设有一个包含1000万个元素的列表,而您只想省略第一个元素。创建一个流并将其收集到一个新列表在时间和空间上都是O(n)。使用
Arrays.asList(optArr).subList(1,optArr.length)
的答案是一个优雅、简洁的单行程序,在时间和空间上都有O(1)。@nullpointer-Um…我建议只运行原始流,然后根据需要查看它。为什么要用流创建一个新列表,而不仅仅是
Arrays.asList(optArr)
?跳过
的唯一挑战是选择初始元素,而不是skipping@nullpointer我认为我们都可以放心地同意,对于给定的用例,您的答案是最好的。向上投票。
asList
+
子列表
的优点是不必分配一个全新的列表。数组用作列表的备份存储,而不是复制。第一个可能就是解决方案。O(1)时间和空间,与这里的所有其他答案基本相反。
List<String> list = Arrays.asList(optArr).subList(1,optArr.length);
System.out.println(list);
List<String> list = Arrays.stream(optArr)
    .skip(1)
    .collect(Collectors.toList());
System.out.println(list);
List<String> al = new ArrayList<>(Arrays.asList(optArr));
List actualList = list.subList(1, al.size());
public static <T> T[] copyOfRange(T[] original, int from, int to)
List<String> result = Arrays.asList(Arrays.copyOfRange(optArr, 1, optArr.length));
List<String> result = IntStream.range(1, optArr.length).mapToObj(i->optArr[i]).collect(Collectors.toList());
String[] optArr = {"start", "map1", "map2", "map3"};
final List<String> list = new ArrayList<>();

for (int i = 1; i < optArr.length; i++) // skip first element
    list.add(optArr[i]);