将数组转换为Stream流的两种方式--- Stream.of(数组名) 与 Arrays.stream(数组名)

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数组转换为Stream流的两种方式--- Stream.of(数组名) 与 Arrays.stream(数组名)相关的知识,希望对你有一定的参考价值。


将数组转换为流的方式:有两种;

  • Stream.of(数组名)
  • Arrays.stream(数组名)

对于不同的数据类型的数组,两种方式的返回值是不同的:

通过将数组转换为Stream流的两种方式;来遍历数组;查看它们的不同之处


首先看:Stream.of(数组名)

  • 当数组的数据类型为基础类型时:
public class Demo {
    public static void main(String[] args) {
        //当数组的数据类型为基本数据类型时;
        int[] array={1,2,3,5,6};
        //使用Stream.of方式;
        Stream.of(array).forEach(item -> System.out.print(item + " "));
    }
}

结果:

[I@404b9385

查看源码;发现此时 Stream.of 的参数和返回值一致;在调用此方法时;传入的数据为array;即int[];所以返回值为Stream<int[]>;得出的是数组地址.

 public static<T> Stream<T> of(T t) {
        return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
    }

  • 当数组的数据类型为包装类时
public class Demo {
    public static void main(String[] args) {
        //当数组的数据类型为包装类时;
        Integer[] array={1,2,3,5,6};
        //使用Stream.of方式;
        Stream.of(array).forEach(item -> System.out.print(item + " "));
    }
}

结果:

1 2 3 5 6 

查看源码:发现此时 Stream.of 的参数T... values是可变长度的参数;本质上就是个数组;返回值为Stream<Integer>;
输出的是数组中的元素.

public static<T> Stream<T> of(T... values) {
        return Arrays.stream(values);
    }

观察方法体;发现return Arrays.stream(values);;它转到Arrays.stream()方法中了;方法参数为T[] array;刚才的values传参;返回值为Stream<Integer>;
输出的是数组中的元素.

public static <T> Stream<T> stream(T[] array) {
        return stream(array, 0, array.length);
    }

第二种方式Arrays.stream(数组名)

  • 当数组的数据类型为基础类型时:
public class Demo {
    public static void main(String[] args) {
        //当数组的数据类型为基本数据类型时;
        int[] array={1,2,3,5,6};
        //使用Arrays.stream方式;
        Arrays.stream(array).forEach(item -> System.out.print(item + " "));
    }
}

结果:

1 2 3 5 6 

查看源码: 此方法的参数为int[ ] array 返回值为IntStream;

 public static IntStream stream(int[] array) {
        return stream(array, 0, array.length);
    }

  • 当数组的数据类型为包装类时
public class Demo0 {
    public static void main(String[] args) {
        //当数组的数据类型为包装类时;
        Integer[] array={1,2,3,5,6};
        //使用Arrays.stream方式;
        Arrays.stream(array).forEach(item -> System.out.print(item + " "));
    }
}

结果:

1 2 3 5 6 

查看源码: 此时方法的参数T[] array为数组;返回值为Stream<Integer>;输出的是数组的元素

public static <T> Stream<T> stream(T[] array) {
        return stream(array, 0, array.length);
    }

以上是关于将数组转换为Stream流的两种方式--- Stream.of(数组名) 与 Arrays.stream(数组名)的主要内容,如果未能解决你的问题,请参考以下文章

Java中两种获取Stream流的方式

python数字转换为字符串的两种方式

Stream流

Stream流的排序用法

Stream流的排序用法

spark-sql将Rdd转换为DataFrame进行操作的两种方法