java新特性-----stream

stream是什么?

1:流是”从支持数据处理操作的源 生成的一系列操作“

A sequence of elements supporting sequential and parallel aggregate operations是支持顺序和并行聚合操作的元素序列,

2:流操作类型:中间操作和终端操作

filter,map,limit,sorted,distinct可以连成一条流水线,collect,forEach,count触发流水线执行并关闭它。

注意:一个流只能遍历一次,流中元素按需计算。

3:流的内部迭代与外部迭代:使用Collection接口需要用户去做迭代(比如用for-each)称外部迭代,Stream用的是内部迭代

       外部迭代:List<String> names= new ArrayList<>();
                            for(Dish d:menu){
                                 names.add(d.getName());
                             }

       内部迭代:List<String> names=menu.stream().map(Dish::getName).collection(toList());

4:使用

(1)筛选:filter谓词筛选,distinct去重,limit截断,skip跳过。

// stream()方法是Collection接口的一个默认方法 : Stream<T> filter(Predicate<? super T> // predicate);

//filter方法参数是一个Predicate函数式接口并继续返回Stream接口  

// 解释:从字符串序列中过滤出以字符a开头的字符串并迭代打印输出 stringList.stream().filter((s) ->

stringList.stream().filter((s) -> s.startsWith("a")).forEach(System.out::println);

(2)映射:map,flatmap

// 解释:将集合元素转为大写(每个元素映射到大写)->降序排序->迭代输出不影响原来集合
  stringList.stream().map(String::toUpperCase).sorted((a, b) -> b.compareTo(a)).forEach(System.out::println);
String[] words={"hello","world"};
//讲一个数组转化成一个数组流
List<String> uni= Arrays.stream(words).map(w->w.split(" ")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());

使用flatmap的效果是将各个数组并不是分别映射成一个流,而是映射成流的内容,简而言之就是把一个流中的每一个值都转换成另一个流然后所有流连接成一个新流。

(3)匹配和查找:检查谓词是否匹配所有元素allMatch,检查谓词是否至少匹配一个元素anyMatchh,流中没有任何元素与给定的谓词匹配noneMatch,查找第一个元素findFirst,查找当前流任一元素findAny。所有的匹配操作都是终结操作,只返回一个boolean类型的结果

(4)规约:reduce,count

// 解释:返回集合中以'a'开头元素的数目
        long startsWithACount = stringList.stream().filter((s) -> s.startsWith("a")).count();
        System.out.println(startsWithACount);
        System.out.println(stringList.stream().count());

(5)sort排序

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值