Java8之Stream常用操作方式

曠世奇才927發表於2022-02-10

???


哈嘍!大家好,我是【學無止境小奇】,一位熱愛分享各種技術的博主!???


⭐【學無止境小奇】的創作宗旨:每一條命令都親自執行過,每一行程式碼都實際執行過,每一種方法都真實實踐過,每一篇文章都良心製作過。✊✊✊


⭐【學無止境小奇】的部落格中所有涉及命令、程式碼的地方,除了提供圖片供大家參考,另外會在圖片下方提供一份純文字格式的命令或者程式碼方便大家貼上複製直接執行命令或者執行程式碼。???


⭐如果你對技術有著濃厚的興趣,歡迎關注【學無止境小奇】,歡迎大家和我一起交流。???


❤️❤️❤️感謝各位朋友接下來的閱讀❤️❤️❤️

@

一、前期準備

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 +
                '}';
    }
}

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)
    );
}

二、Stream常用操作方式

1、篩選

1.1、filter

filter從集合中過濾某些元素,例如查詢集合中年齡大於20的資料集合

在這裡插入圖片描述

        //查詢年齡大於20的資料集合
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .collect(Collectors.toList());

1.2、limit

limit,和mysql中的limit類似,返回指定數量的資料

在這裡插入圖片描述

        //查詢年齡大於20的1個資料
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .limit(1)
                .collect(Collectors.toList());

1.3、skip

skip,跳過元素,返回一個跳過前n個元素的集合

在這裡插入圖片描述

        //查詢年齡大於20的資料,前一個不要
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .skip(1)
                .collect(Collectors.toList());

1.4、distinct

distinct,篩選,通過元素的hashCode()和equals()去除重複元素

在這裡插入圖片描述

        //查詢年齡大於20的資料,並去重
        List<Student> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .distinct()
                .collect(Collectors.toList());

2、對映

2.1、map

map,將集合元素轉換成其他形式返回,接收一個函式作為引數,該函式作用到每一個元素上,並將其對映成一個新的元素

在這裡插入圖片描述

        //查詢年齡大於20的資料,只獲取姓名集合
        List<String> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .map(Student::getName)
                .collect(Collectors.toList());

3、排序

3.1、sorted()

sorted()自然排序

在這裡插入圖片描述

    //查詢年齡大於20的資料,只獲取姓名,並排序
        List<String> list = studentList.stream()
                .filter(s -> s.getAge()>20)
                .map(Student::getName)
                .sorted()
                .collect(Collectors.toList());

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());

4、查詢與匹配

4.1、allMatch

allMatch檢查是否匹配所有元素

在這裡插入圖片描述

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

4.2、anyMatch

anyMatch是否匹配至少一個元素

在這裡插入圖片描述

        //判斷集合中是否至少有一個姓名等於"張三"
        boolean flag = studentList.stream()
                .anyMatch((e) -> e.getName().equals("張三"));

4.3、noneMatch

noneMatch檢查是否沒有匹配所有元素

在這裡插入圖片描述

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

4.4、findFirst

findFirst返回第一個元素

在這裡插入圖片描述

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

4.5、findAny

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

在這裡插入圖片描述

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

4.6、conut

conut返回流中元素的總個數

在這裡插入圖片描述

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

4.7、max

返回流中最大值

在這裡插入圖片描述

        //返回集合中年齡最大的一條資料
        Optional<Student> student = studentList.stream()
                .max((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));

4.8、min

返回流中最小值

在這裡插入圖片描述

        //返回集合中年齡最大的一條資料
        Optional<Student> student = studentList.stream()
                .min((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));

相關文章