在Java中,无法从这些元素的一个数组生成元素数组的流

时间:2019-02-26 11:13:46

标签: java arraylist

给出片段代码:

    Integer [] arrayIntegers_1 = {100,5,80,9,65,200};
    Integer [] arrayIntegers_2 = {30,99,800};
    Integer [] arrayIntegers_3 = {166,520,7};

    Stream<Integer[]> streamOfArraysOfIntegers=Stream.of(arrayIntegers_1,arrayIntegers_2,arrayIntegers_3);
    //OK, it is a Stream of arrays of Integers

    Stream<Integer[]> streamOfArraysOfIntegers_1=Stream.of(arrayIntegers_1);
    //Compilation fail in this line, Java cannot make a Stream of arrays of Integers or others objects from one (1) array

    Stream<Integer> streamOfOfIntegers=Stream.of(arrayIntegers_1);
    //From one (1) array Java makes a Stream of elements in this array, in this case it is a Stream of Integers 

在失败编译的过程中,我等待Java用一个Integer数组制作一个Integer数组流,但是没有。在下一行中,我们可以看到Java从一个数组中生成了一个整数流。

但是,使用Collections不会发生这种情况,我们如何在下一个片段代码(最后一行)中看到

    ArrayList<Integer> listOfIntegers=new ArrayList<>();
    listOfIntegers.add(300); listOfIntegers.add(5); listOfIntegers.add(98); listOfIntegers.add(1); listOfIntegers.add(7);
    ArrayList<Integer> listOfIntegers_1=new ArrayList<>();
    listOfIntegers_1.add(999); listOfIntegers_1.add(3); listOfIntegers_1.add(85);   listOfIntegers_1.add(561); listOfIntegers_1.add(42);

    Stream<ArrayList<Integer>> streamOfListofIntegers=Stream.of(listOfIntegers,listOfIntegers_1);
    Stream<ArrayList<Integer>> streamOfListofIntegers_1=Stream.of(listOfIntegers); //Stream of ArrayList of Integers with one (1) ArrayList of Integers

我要感谢任何评论。

1 个答案:

答案 0 :(得分:5)

如果您想强制Stream.of构建Stream<Integer[]>,则可以使用:

Stream<Integer[]> streamOfArraysOfIntegers_1 = 
                     Stream.<Integer[]>of(arrayIntegers_1);

原因是Stream.of带有一个var-arg,这意味着当给定单个数组时,它将生成该数组的各个元素的流。

如果您实际上将其传递给多个数组,则无需这样做:

Stream<Integer[]> streamOfArraysOfIntegers_1 = 
                     Stream.of(arrayIntegers_1, arrayIntegers_2);

将此行为与集合的行为进行比较是不相关的。这会影响数组,因为它们与var-args有关系(您可以将T[]作为参数传递给以T...作为参数的方法);而集合不是这种情况。