学习任务:

视频学习

什么是折叠操作

测试基本类型stream

折叠操作又称规约操作,是从一系列输入元素通过组合操作将其组合成单个摘要结果,例如查找一组数字的和、最大值、最小值、平均数以及将所有元素转换成一个列表或集合等。

下图是常用的折叠操作:

image-20201025054613997

为了方便对纯数字的流处理,Java提供了三种基本类型的stream,如下:

image-20201025060206196

通过Stream接口中的mapToInt()、mapToLong()、mapToDouble()即可得到对应的stream对象,方法原型如下:

IntStream mapToInt(ToIntFunction<? super T> mapper);
LongStream mapToLong(ToLongFunction<? super T> mapper);
DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper);

拿IntStream举例,IntStream接口中包括了很多有关整型数据流操作的方法,其中就包括了很多折叠操作,如:max()、min()、sum()等,部分的API截图如下:

image-20201025060845778

使用基本类型stream首先需要得到基本类型stream对象,然后再使用其方法,测试如下:

如何得到一个基本类型Stream呢?

1)从数组得到数字流

//从数组得到数字流
public static void test_intstream_1() {
    //整型数组
    int[] array_1 = new int[]{1,2,3,4,5};
    IntStream intStream = Arrays.stream(array_1);
    //count()
    long count = intStream.count();
    System.out.println(count);
}

2)从List得到数字流

	//从List得到数字流
    public static void test_intstream_2() {
        List<PbCourse> list = new ArrayList<>() ;
        list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
        list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
        list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
        list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
        list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
        //提取价格,组成IntStream
        IntStream intStream = list.stream().mapToInt(x -> x.getPrice());
        //count()
        long count = intStream.count();
        System.out.println(count);
    }

下边测试常用的折叠方法,代码如下:

//测试IntStream
	public static void test_intstream() {
		List<PbCourse> list = new ArrayList<>() ;
        list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
        list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
        list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
        list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
        list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
        //count()
        long count = list.stream().mapToInt(x->x.getPrice()).count();
        System.out.println(count);
        //sum()
        int sum = list.stream().mapToInt(x->x.getPrice()).sum();
        System.out.println(sum);
        //max()
        OptionalInt max = list.stream().mapToInt(x->x.getPrice()).max();
        //OptionalInt类型加入了空值的判断,没有值则抛出异常
        System.out.println(max.getAsInt());
        //average()
        OptionalDouble average = list.stream().mapToInt(x->x.getPrice()).average();
        System.out.println(average.getAsDouble());
	}

输出:

5
264
66
52.8
提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题