美文网首页
工作笔记(五)

工作笔记(五)

作者: overflow_e4e4 | 来源:发表于2019-08-27 16:55 被阅读0次

    Arrays.stream()的用法

    Arrays.stream(),这个方法适用于把数组转换成stream然后方便对其进行stream的一系列处理。
    比如:
    Object[] objects= new Object[1]; Arrays.stream(objects).collect(Collectors.toList());
    但是当数组为基础类型时,这样做不行。

    int[] ints = new int[1];
    Arrays.stream(ints).collect(Collectors.toList());

    因为Arrays.stream其实是一个重载函数,他一共有四种

    image.png
    仅能接受四种数组,int[],long[],double[],T[]也就是说其他基础类型的数组比如 boolean[]也不能使用Arrays.stream()进行封装。

    基础类型和对象类型数组使用时的区别

    当用Arrays.stream()进行封装时,基础类型和对象类型数组是有区别的。具体区别,以int[]为例,如图所示:

    int[]
    T[]

    Arrays.stream(int[]) 返回的是IntStream而不是Stream<T>。这也导致了由这两种数组返回的Stream其实在用法上有所区别。

    用法上的区别

    IntStream其实是专门用于数值计算的Stream,他提供了一些很好用的方法,比如:

    • sum()
    • max()
    • min()
    • average()
      这些方法方便我们更好的计算。
      举个例子:
            Integer[] integers = new Integer[10];
            for (int i = 0; i <10 ; i++) {
                ints[i] = i;
                integers[i] = i;
    
            }
            int sum1 = Arrays.stream(integers).reduce(0, (a, b) -> a + b);
            int sum2 = Arrays.stream(ints).sum();
            System.out.println(sum1);
            System.out.println(sum2);
    

    Stream显然对数值的处理显得比较繁琐,而IntStream就简单的多。

    如何互相转换

    其实IntStreamStream完全可以互相转换,其转换方式如下所示。

    IntStream intStream = Arrays.stream(integers).mapToInt(e -> e);
    Stream<Integer> stream = Arrays.stream(ints).boxed();
    

    同理,double,long也有对应的方法。

    相关文章

      网友评论

          本文标题:工作笔记(五)

          本文链接:https://www.haomeiwen.com/subject/khieectx.html