JDK8--Stream基本使用

目录

 

Stream简介

Stream方法使用

stream()/collect()方法

filter()方法

map()方法

limit()方法

forEach()

sorted()排序

统计

并行程序


Stream简介

  1. Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
  2. 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

可以看出Stream主要是用于集合的,使用Stream能帮助我们在使用集合的使后更有效率。流可以看作溪水,从A容器流向B容器,在流动的过程中可以对其进行操作。

Stream方法使用

stream()/collect()方法

分别是 ‘将集合转换为流’/‘将流解析为集合’

        List<Integer> arr = Arrays.asList(1,2,3,4);
        //将集合转换为流
        Stream<Integer> stream = arr.stream();
    
        //.....在此就可以对流进行操作了
        
        //将流解析为集合
        List<Integer> collect = stream.collect(Collectors.toList());
        //可以简化为
        List<Integer> collect1 = arr.stream().collect(Collectors.toList());

filter()方法

用于对集合进行过滤。如只保留集合{1,2,3,4,0}中大于2的元素。

使用stream实现

//stream将arr转成流,filter(如果返回true保留,false丢弃),collect在将流转换为列表
List<Integer> collect = arr.stream().filter(e -> e > 2).collect(Collectors.toList());

使用for实现

List<Integer> arr = Arrays.asList(1,2,3,4);
List<Integer> res = new ArrayList<>();
for (Integer integer : arr) {
    if(integer > 2)
        res.add(integer);
}

map()方法

map()是一个key:value操作,将一个数映射为其它数。如果将集合{1,2,3,4}生成新的集合,每个元素+2,

        List<Integer> list = Arrays.asList(1, 2, 3, 4);
//map将e映射成为了e+2
        List<Integer> collect = list.stream().map(e -> e + 2).collect(Collectors.toList());
    

limit()方法

limil(n) 只保留流中前n个元素,如只保留列表{1,2,3,4}前两个元素

List<Integer> list = Arrays.asList(1, 2, 3, 4);
List<Integer> collect = list.stream().limit(2).collect(Collectors.toList());


forEach()


Stream 提供了新的方法 'forEach' 来迭代流中的每个数据。以下代码片段遍历一个数组:

        List<Integer> arr = Arrays.asList(1,2,3,4);
        arr.forEach(System.out::println);
===>
1
2
3
4

sorted()排序

给集合的排序,是跟常用的功能,下边演示对集合的操作

 List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        Comparator<Integer> comparator = new Comparator<Integer>() {
            //t是当前的,t1是上一个  返回>0递增,<0递减
            @Override
            public int compare(Integer t, Integer t1) {
                System.out.println(t+"::"+t1);
                return t-t1;
            }
        };
        numbers.stream().sorted(comparator).forEach(System.out::println);
===>
2
2
3
3
3
5
7

统计

另外,一些产生统计结果的收集器也非常有用。它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果。

List<Integer> numbers2 = Arrays.asList(3, 2, 2, 3, 7, 3, 5);

        IntSummaryStatistics stats = numbers2.stream().mapToInt((x) -> x).summaryStatistics();

        System.out.println("列表中最大的数 : " + stats.getMax());
        System.out.println("列表中最小的数 : " + stats.getMin());
        System.out.println("所有数之和 : " + stats.getSum());
        System.out.println("平均数 : " + stats.getAverage());

===>
列表中最大的数 : 7
列表中最小的数 : 2
所有数之和 : 25
平均数 : 3.5714285714285716

并行程序

  List<String> strings1 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量 层使用Fork/Join框架实现。简单理解就是多线程异步任务的一种实现。
        //并行流
        List<String> count = strings1.parallelStream().filter(string1 -> !string1.isEmpty()).collect(Collectors.toList());
        count.forEach(System.out::println);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值