美文网首页Java 杂谈
JAVA8新特性:Stream

JAVA8新特性:Stream

作者: 白桦树97 | 来源:发表于2019-06-27 12:05 被阅读0次

1.筛选与切片:

List<Device> list = new ArrayList<>();
        list.add(new Device(1,"yueliang"));
        list.add(new Device(1,"yueliang"));
        list.add(new Device(2,"xiannv"));
        list.add(new Device(3,"xiaohong"));
        list.add(new Device(5,"xiaolv"));
        list.add(new Device(7,"hah"));
        list.add(new Device(9,"xixi"));

 list.stream()
                .filter(e->e.getId()<7)          //取id小于7的对象
                .distinct()                      //去重,必须重写对象的equals和hashcode方法
                .limit(3)                        //取前三个
                .skip(1)                         //跳过第一个
                .forEach(System.out::println);

测试结果

image.png

2.映射:

接受lambda,作用到每一个元素,并得到新值
1.大小写转换

 List<String> list = Arrays.asList("xixi","hah","ddidi");
        list.stream()
                .map(str->str.toUpperCase())
                .forEach(System.out::println);   //输出结果转换为大写

2.提取每个对象的名称

List<Device> list = new ArrayList<>();
        list.add(new Device(1, "name1"));
        list.add(new Device(4, "hah"));
        list.add(new Device(3, "xixi"));
        list.stream()
                .map(Device::getName)
                .forEach(System.out::println);

3.排序(自定义排序):

按照id排序,如果id相同则按照姓名排序

List<Device> list = new ArrayList<>();
        list.add(new Device(4, "hah"));
        list.add(new Device(1, "a"));
        list.add(new Device(1, "c"));
        list.add(new Device(1, "b"));
        list.add(new Device(3, "xixi"));
        list.stream()
                .sorted((e1,e2)->{
                    if(e1.getId().equals(e2.getId())){
                        return  e1.getName().compareTo(e2.getName());
                    }else return e1.getId().compareTo(e2.getId());

                })
                .forEach(System.out::println);

4.查找和匹配(以下均为终止操作):

image.png

例如:

        long count = list.stream().count();
        System.out.println(count);

5.规约(将流中元素反复结合,形成一个新的值):

下面即著名的goole框架模式 map-reduce

Optional<Integer> sum = list.stream()
                .map(e -> e.getId())
                .reduce(Integer::sum);   //相当于.reduce((e1,e2)->e1+e2);
        System.out.println(sum);

6.⭐️收集:(将流转换成其他集合形式)

List<Device> collect = list.stream()
                .filter(e->e.getId()<2)
                .collect(Collectors.toList());
        collect.forEach(System.out::println);

还有个小特性:惰性求值

       //中间操作,不执行任何操作
        Stream<Device> stream = list.stream()
                .filter((e)->{
                    System.out.println("执行中间操作");
                    return e.getId()>2;
                });
        //最终操作:一次执行全部内容,即:惰性求值
        stream.forEach(System.out::println);

相关文章

  • Stream流

    Stream流 java8新特性 Stream定义 A sequence of elements supporti...

  • Stream API

    Stream 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Stream API Java...

  • java 8 stream 流详细教程

    1 基本特性 Java8的API中添加了一个新的特性: 流,即stream。stream是将数组或者集合的元素视为...

  • JAVA8新特性:Stream与Lambda表达式

    一、Stream学习 在学习lambda表达式之前,我们需要先了解Stream这个java8的新特性。 Strea...

  • Java8新特性系列(流性能)

    上期介绍了Java8中Stream的新特性,本期我们将测试下stream与parallelStream的性能以及应...

  • java8新特性

    java8新特性 原创者:文思 一、特性简介 速度更快 代码更少,增加了Lambda 强大的Stream API ...

  • 03_Java8_Lamda表达式学习

    Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、Concurrent...

  • parallelStream使用不当引发的血案

    Stream简洁 众所周知,java8的新特性中出了lambda表达式之外最受人关注的还有stream一系列的ap...

  • Java8新特性Stream

    声明转载自:http://www.importnew.com/11908.html#streams Stream ...

  • JAVA8新特性:Stream

    1.筛选与切片: 测试结果 2.映射: 接受lambda,作用到每一个元素,并得到新值1.大小写转换 2.提取每个...

网友评论

    本文标题:JAVA8新特性:Stream

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