我是靠谱客的博主 粗心小松鼠,最近开发中收集的这篇文章主要介绍java Stream API 配合Lambda表达式--JDK1.8新特性思维导图学习感悟Stream API 的流水线思想(懒加载),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

思维导图

学习感悟

JDK1.8以后对集合操作提供了一些新的API,使用起来比较便利,除了代码可读性差一点(即lambda表达式),个人感觉值得学习。 例如下面分组需求:一个集合中存放多个学生对象,我需要根据学生性别分组,学生类如下:

package org.ymh.demo;

public class Student {
    private String name;
    private String sex;
    private String address;

    public Student(String name, String sex, String address) {
        this.name = name;
        this.sex = sex;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

传统方式:

public class Demo {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
                new Student("张三", "男", "西安"),
                new Student("李四", "男", "西安"),
                new Student("王五儿", "女", "北京"),
                new Student("赵六儿", "女", "上海"),
                new Student("苏七", "男", "杭州")
        );
        HashMap<String, List<Student>> map = new HashMap<>();
        for (Student student : students) {
            if (student.getSex() == "男") {
                List<Student> list = map.get("男");
                if (list == null) {
                    list = new ArrayList<>();
                    map.put("男", list);
                }
                list.add(student);
            } else {
                List<Student> list2 = map.get("女");
                if (list2 == null) {
                    list2 = new ArrayList<>();
                    map.put("女", list2);
                }
                list2.add(student);
            }
        }
        System.out.println(map);
    }

接下来我们用Stream API中提供的方法改写

Collectors中的groupingby()方法可以实现按需求分组

public class Demo {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
                new Student("张三", "男", "西安"),
                new Student("李四", "男", "西安"),
                new Student("王五儿", "女", "北京"),
                new Student("赵六儿", "女", "上海"),
                new Student("苏七", "男", "杭州")
        );

        Map<String, List<Student>> map = students.stream().collect(Collectors.groupingBy((s) -> s.getSex() ));
        System.out.println(map);
    }
}

利用lambda表达式配合流方法,简单的一行代码就实现了这个需求。

IntStream对整数进行操作

public class Demo {
    public static void main(String[] args) {
        //求最大值
        System.out.println(IntStream.of(45,32,65,95,7,85).max());
        //求最小值
        System.out.println(IntStream.of(45,32,65,95,7,85).min());
        //求平均值
        System.out.println(IntStream.of(45,32,65,95,7,85).average());
        //求和
        System.out.println(IntStream.of(45,32,65,95,7,85).sum());
    }
}

利用这个方法我们就不需要将整数先存入集合,遍历集合,比较大小,累加,求平均值等操作了。

Stream API 的流水线思想(懒加载)

Pipeline 流水线思想:流中的数据时流动的,而且是一个一个处理的,一个不处理完成,下一个绝对不会被处理。即每个数据会经过后续的filter, map等方法依次调用。没有遇到终结方法,以上方法也不会执行。

常见的终结方法:collect()、sum()、max()、min()等

最后

以上就是粗心小松鼠为你收集整理的java Stream API 配合Lambda表达式--JDK1.8新特性思维导图学习感悟Stream API 的流水线思想(懒加载)的全部内容,希望文章能够帮你解决java Stream API 配合Lambda表达式--JDK1.8新特性思维导图学习感悟Stream API 的流水线思想(懒加载)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部