Java流中groupingby怎么用

在Java中,groupingBy 是 Collectors 类中的一个方法,它用于对流中的元素进行分组。这个方法通常与 Stream API 的 collect 方法一起使用,用于收集流中的数据,并基于某个属性或条件将其分组。

下面是一个简单的例子,展示了如何使用 groupingBy 来对一个包含多个对象的流进行分组:

1、首先,假设我们有一个 Person 类,其中包含姓名(name)和年龄(age)两个属性:

public class Person {  
    private String name;  
    private int age;  
  
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    // Getter 和 Setter 方法  
    public String getName() {  
        return name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    @Override  
    public String toString() {  
        return "Person{" +  
                "name='" + name + '\'' +  
                ", age=" + age +  
                '}';  
    }  
}

2、然后进行使用groupingBy

import java.util.*;  
import java.util.function.Function;  
import java.util.stream.Collectors;  
  
public class GroupingByExample {  
    public static void main(String[] args) {  
        List<Person> people = Arrays.asList(  
                new Person("Alice", 25),  
                new Person("Bob", 30),  
                new Person("Charlie", 25),  
                new Person("David", 35),  
                new Person("Eve", 25)  
        );  
  
        // 使用 groupingBy 按年龄分组  
        Map<Integer, List<Person>> peopleByAge = people.stream()  
                .collect(Collectors.groupingBy(Person::getAge));  
  
        // 输出分组结果  
        peopleByAge.forEach((age, group) -> {  
            System.out.println("Age: " + age);  
            group.forEach(System.out::println);  
            System.out.println();  
        });  
    }  
}

输出的结果

Age: 25  
Person{name='Alice', age=25}  
Person{name='Charlie', age=25}  
Person{name='Eve', age=25}  
  
Age: 30  
Person{name='Bob', age=30}  
  
Age: 35  
Person{name='David', age=35}

你可以使用类似的方法,通过传递不同的函数或方法引用来按不同的属性或条件对流中的元素进行分组。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值