服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java流式操作之Collectors工具类操作指南

Java流式操作之Collectors工具类操作指南

2023-05-05 16:42吃豆子的恐龙 Java教程

Collectors是Collector的工具类,类中提供了很多流收集、归约、分组、分区等方法,方便我们直接使用,下面这篇文章主要给大家介绍了关于Java流式操作之Collectors工具类操作的相关资料,需要的朋友可以参考下

方法

● maxBy:获取流中最大元素;minBy:获取流中最小元素

● joining:合并,将流中的元素,以字符串的形式拼接起来

● summingInt:把流中的元素映射成int类型的元素,求和

● averagingInt:把流中的元素映射成int类型的元素,求平均值

● summarizingInt:把流中的元素映射成int类型的元素,获取描述信息

实践说明

一、前提条件

Person类

?
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.example;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.context.annotation.Configuration;
import java.util.Objects;
/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: com.example
 * @CreateTime: 2023-05-01  11:18
 * @Description: Person实体类
 * @Version: 1.0
 */
public class Person implements Comparable<Person>{
    public String getName() {
        return name;
    }
    public Person setName(String name) {
        this.name = name;
        return this;
    }
    public int getAge() {
        return age;
    }
    public Person setAge(int age) {
        this.age = age;
        return this;
    }
    public int getScore() {
        return score;
    }
    public Person setScore(int score) {
        this.score = score;
        return this;
    }
    private String name;
    private int age;
    private int score;
    public Person(String name, int age, int score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    public Person() {
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        //地址相同,为true
        if (this == o) return true;
        //为null,并且类型不一样,为false
        if (o == null || getClass() != o.getClass()) return false;
        //向下转型,再去比较属性值
        Person person = (Person) o;
        //如果属性值相同,最后的结果为true
        return age == person.age && score == person.score && Objects.equals(name, person.name);
        //return false;
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age, score);
    }
    @Override
    public int compareTo(Person o) {
        return this.getScore()-o.getScore();
    }
}

Data类

?
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
package com.example;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: com.example
 * @CreateTime: 2023-05-01  11:08
 * @Description: Data类
 * @Version: 1.0
 */
public class Data {
    public static ArrayList<Person> getData() {
        ArrayList<Person> personList = new ArrayList<>();
        personList.add(new Person("张三", 18, 90));
        personList.add(new Person("李四", 19, 100));
        personList.add(new Person("王五", 17, 60));
        personList.add(new Person("赵六", 18, 89));
        personList.add(new Person("孙七", 20, 96));
        personList.add(new Person("郑十", 20, 46));
        personList.add(new Person("周八", 20, 96));
        personList.add(new Person("周八", 20, 96));
        personList.add(new Person("吴九", 20, 45));
        personList.add(new Person("邓十一", 20, 35));
        personList.add(new Person("刘十二", 20, 99));
        personList.add(new Person("小十三", 20, 56));
        personList.add(new Person("小十三", 20, 56));
        return personList;
    }
}

二、操作

maxBy:获取流中最大元素;minBy:获取流中最小元素

?
1
2
3
4
5
6
public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();
        //maxBy:获取流中最大元素;minBy:获取流中最小元素
        System.out.println(Data.getData().stream().collect(Collectors.maxBy((ele1, ele2) -> ele1.getScore() - ele2.getScore())));
        System.out.println(Data.getData().stream().collect(Collectors.minBy((ele1, ele2) -> ele1.getAge() - ele2.getAge())));
}

joining:合并,将流中的元素,以字符串的形式拼接起来

?
1
2
3
4
5
6
7
8
public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();
        //joining:合并,将流中的元素,以字符串的形式拼接起来
        //将集合中person对象的姓名拼接成一个字符串
        System.out.println(Data.getData().stream().map(Person::getName).collect(Collectors.joining()));
        System.out.println(Data.getData().stream().map(Person::getName).collect(Collectors.joining("-")));
        System.out.println(Data.getData().stream().map(Person::getName).collect(Collectors.joining("-", "{", "}")));
}

summingInt:把流中的元素映射成int类型的元素,求和

?
1
2
3
4
5
public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();
                //summingInt:把流中的元素映射成int类型的元素,求和
        System.out.println(Data.getData().stream().collect(Collectors.summingInt(Person::getScore)));
}

averagingInt:把流中的元素映射成int类型的元素,求平均值

?
1
2
3
4
5
public static void main(String[] args) {
        Stream<Person> stream = Data.getData().stream();
        //averagingInt:把流中的元素映射成int类型的元素,求平均值
        System.out.println(Data.getData().stream().collect(Collectors.averagingInt(Person::getScore)));
}

summarizingInt:把流中的元素映射成int类型的元素,获取描述信息

需求:将流中分数大于等于80的Person对象替换成他们的姓名

?
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
       Stream<Person> stream = Data.getData().stream();
       //summarizingInt:把流中的元素映射成int类型的元素,获取描述信息
       IntSummaryStatistics collect = Data.getData().stream().collect(Collectors.summarizingInt(Person::getScore));
       System.out.println(collect);
       System.out.println(collect.getCount());
       System.out.println(collect.getSum());
       System.out.println(collect.getMax());
       System.out.println(collect.getMax());
       System.out.println(collect.getAverage());

输出结果:

Java流式操作之Collectors工具类操作指南

总结

到此这篇关于Java流式操作之Collectors工具类操作的文章就介绍到这了,更多相关Java流式操作Collectors工具类内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43319713/article/details/130462745

延伸 · 阅读

精彩推荐