List中Stream和Lambda表达式

蓝咒 提交于 2020-01-22 17:06:36
创建
通过数组创建
Arrays.stream;
通过集合创建
//普通流
集合对象.stream();
//并行流
集合对象.parallelStream();
创建空的流
Stream.empty();
创建无限流
//创建无限流,通过limit提取指定大小
Stream.generate()
创建规律的无线流
Stream.iterate()
方法
collect(toList())&filter

    collect(toList())的作用是通过一个Stream对象生成List对象,当流执行了collect方法才会触发之前的转换操作
    filter用于过滤Stream中的元素,filter方法是一个高阶函数,接受一个函数接口作为参数,此高阶函数返回一个boolean值,返回true的元素会被保留下来
    高阶函数:接收或者返回一个函数接口的函数成为高阶函数
    函数接口:只包含一个函数的接口称为函数接口

eg

map

    map函数的作用是将流中的一个值转换成一个新值,即将一个List转换为另一个list,可以更改List中的值(转换流,将一种类型的流转换为另外一种流)
eg

flatMap

    floatMap:将多个Stream连接成一个Stream
eg

max&min

    求List的最大值或者最小值,需要指定对比依据
eg

reduce

    从一组值中生成一个新的值,reduce可以做为集合的累加或者减少
eg

sorted

    对流进行排序
eg

findFirst

    查找第一个

findAny

    找到所有匹配的元素,对并行流十分有效,只要在任何一个片段中发现第一个匹配元素就会结束整个运算

anyMatch

    是否含有匹配元素,如果含有匹配元素则返回true

Optional类型

    通常聚合操作会返回一个Optional类型,Optional表示一个安全的指定结果类型,安全是指避免直接调用返回类型的null值而造成空指针异常,调用optional.ifPresent()可以判断返回值类型是否为空,或者直接调用ifPresent(Consumer<? super T> consumer)在结果不为空时进行消费操作,调用optional.get()

collect

    收集结果
    collect(toList()),collect(toSet()),collect(toMap(Student::getName,Student::getScore,(s,a)->s+a))
    生成指定类型
    collect(toCollection(HashSet::new));
eg
    统计
    collect(Collectors.summarizingInt(Student::getScore));
eg
    分组和分片(分组和分片的意义,将collect的结果集展示为Map<key,val>的形式)
    分组:collect(groupingBy(Student::getName));
    //如果只有两类,使用partitioningBy会比groupingBy更有效率
    分片:collect(partitioningBy(x->x.getScore()>50));

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!