【Java 8 新特性】Java 8 Collectors: partitioningBy示例(将List按照满足条件和不满足条件分组)

本文详细介绍了Java 8中的Collectors.partitioningBy方法,如何使用该方法根据学生年龄将流式集合分为两部分,并提供了代码示例。通过Map存储结果,展示了年龄大于20的学生和小于等于20的学生分别在哪个分区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 8 Collectors.partitioningBy是一种将流的元素始终分为两部分的方法。

它返回一个在Map中存储值的收集器。

Map中的key只能是truefalse

此方法接收一个Predicate和返回一个Collector(收集器)

语法如下

public static <T> Collector<T,?,Map<Boolean,List<T>>>  partitioningBy(Predicate<? super T> predicate)

代码示例

Student.java

package com.concretepage.util.stream;
public class Student {
    private String name;
    private int age;
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
} 

我们将根据学生的年龄来划分他们。例如,我们将所有20岁的学生进行分区。年龄超过20岁的学生将是一个分区,其余的将是另一个分区。

核心代码

Map<Boolean, List<Student>> stdByClass = list.stream().collect(Collectors.partitioningBy(s -> s.getAge() > 20));

Collectors.partitioningBy接受将被定义为返回true或false的Predicate

这个Predicate应用于流的所有元素。

Collectors.partitioningBy通过Stream.collect方法返回一个Map 收集器。

Map中的key只能是truefalse

CollectorsPartitioningBy.java

package com.concretepage.util.stream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class CollectorsPartitioningBy {
     public static void main(String[] args) {
        Student s1 = new Student("Ram", 18);
        Student s2 = new Student("Shyam",22);
        Student s3 = new Student("Mohan",19);
        Student s4 = new Student("Mahesh",20);
        Student s5 = new Student("Krishna",21);
        List<Student> list = Arrays.asList(s1,s2,s3,s4,s5);
        //partition of Student on the basis of age
        System.out.println("----Partition of Student on the basis of age >20 ----");
        Map<Boolean, List<Student>> stdByClass = list.stream()
                    .collect(Collectors.partitioningBy(s -> s.getAge() > 20));
        
        stdByClass.forEach((k,v)->System.out.println("Key:"+k+"  "+ 
                ((List<Student>)v).stream().map(s->s.getName()).collect(Collectors.joining(","))));
    }
} 

输出

----Partition of Student on the basis of age >20 ----
Key:false  Ram,Mohan,Mahesh
Key:true  Shyam,Krishna 

参考文献

【1】Java 8 Collectors: partitioningBy Example

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值