Java8之Stream常用操作方式

举报
小奇JAVA 发表于 2022/03/29 22:31:57 2022/03/29
【摘要】 👏👏👏 哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!😍😍😍 ⭐【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,...

👏👏👏

哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!😍😍😍

⭐【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。✊✊✊

⭐【学无止境小奇】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。🤝🤝🤝

⭐如果你对技术有着浓厚的兴趣,欢迎关注【学无止境小奇】,欢迎大家和我一起交流。😘😘😘

❤️❤️❤️感谢各位朋友接下来的阅读❤️❤️❤️

一、前期准备

1、创建对象

1.1、Student

在这里插入图片描述

public class Student {
    private int id;
    private String name;
    private String sex;
    private int age;

    public Student(int id, String name, String sex, int age) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

2、初始化数据

2.1、初始化集合

在这里插入图片描述

public class StreamTest {
    List<Student> studentList = Arrays.asList(
            new Student(1,"张三","男",20),
            new Student(2,"李四","男",25),
            new Student(3,"王五","女",18),
            new Student(4,"赵六","女",26)
    );
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

二、Stream常用操作方式

1、筛选

1.1、filter

filter从集合中过滤某些元素,例如查询集合中年龄大于20的数据集合

在这里插入图片描述

        //查询年龄大于20的数据集合
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .collect(Collectors.toList());

  
 
  • 1
  • 2
  • 3
  • 4

1.2、limit

limit,和mysql中的limit类似,返回指定数量的数据

在这里插入图片描述

        //查询年龄大于20的1个数据
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .limit(1)
                .collect(Collectors.toList());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

1.3、skip

skip,跳过元素,返回一个跳过前n个元素的集合

在这里插入图片描述

        //查询年龄大于20的数据,前一个不要
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .skip(1)
                .collect(Collectors.toList());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

1.4、distinct

distinct,筛选,通过元素的hashCode()和equals()去除重复元素

在这里插入图片描述

        //查询年龄大于20的数据,并去重
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .distinct()
                .collect(Collectors.toList());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

2、映射

2.1、map

map,将集合元素转换成其他形式返回,接收一个函数作为参数,该函数作用到每一个元素上,并将其映射成一个新的元素

在这里插入图片描述

        //查询年龄大于20的数据,只获取姓名集合
        List<String> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .map(Student::getName)
                .collect(Collectors.toList());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

3、排序

3.1、sorted()

sorted()自然排序

在这里插入图片描述

    //查询年龄大于20的数据,只获取姓名,并排序
        List<String> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .map(Student::getName)
                .sorted()
                .collect(Collectors.toList());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.2、sorted(Comparator com)定制排序

sorted(Comparator com)定制排序,定制输入排序规则

在这里插入图片描述

//查询年龄大于20的数据,并根据姓名排序
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .sorted((e1,e2) -> {
                    return e1.getName().compareTo(e2.getName());
                })
                .collect(Collectors.toList());

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4、查找与匹配

4.1、allMatch

allMatch检查是否匹配所有元素

在这里插入图片描述

//判断集合中所有的姓名是否都等于"张三"
        boolean flag = studentList.stream()
                .allMatch((e) -> e.getName().equals("张三"));

  
 
  • 1
  • 2
  • 3

4.2、anyMatch

anyMatch是否匹配至少一个元素

在这里插入图片描述

        //判断集合中是否至少有一个姓名等于"张三"
        boolean flag = studentList.stream()
                .anyMatch((e) -> e.getName().equals("张三"));

  
 
  • 1
  • 2
  • 3

4.3、noneMatch

noneMatch检查是否没有匹配所有元素

在这里插入图片描述

//判断集合中是否没有匹配所有元素姓名等于"张三"
        boolean flag = studentList.stream()
                .noneMatch((e) -> e.getName().equals("张三"));

  
 
  • 1
  • 2
  • 3

4.4、findFirst

findFirst返回第一个元素

在这里插入图片描述

//返回集合中第一个元素
        Optional<Student> student = studentList.stream()
                .findFirst();

  
 
  • 1
  • 2
  • 3

4.5、findAny

findAny返回当前集合中的任意元素

在这里插入图片描述

//返回集合中任意一个元素
        Optional<Student> student = studentList.stream()
                .findAny();

  
 
  • 1
  • 2
  • 3

4.6、conut

conut返回流中元素的总个数

在这里插入图片描述

        //返回集合的数量
        long num = studentList.stream()
                .count();

  
 
  • 1
  • 2
  • 3

4.7、max

返回流中最大值

在这里插入图片描述

        //返回集合中年龄最大的一条数据
        Optional<Student> student = studentList.stream()
                .max((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));

  
 
  • 1
  • 2
  • 3

4.8、min

返回流中最小值

在这里插入图片描述

        //返回集合中年龄最大的一条数据
        Optional<Student> student = studentList.stream()
                .min((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));

  
 
  • 1
  • 2
  • 3

文章来源: xiaoqijava.blog.csdn.net,作者:学无止境小奇,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaoqijava.blog.csdn.net/article/details/122752444

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。