Java stream List 转 Map<Object, List>

Java stream List 转 Map<Object, List>


JAVA中的Stream操作一定程度上方便了数据的转换,ListMap的场景下,针对downStream的操作一般较少遇到,遇到的时候一时间也不容易想到处理方式,这里记录一下。

示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StringTest {

    public static void main(String[] args) {
        Student student1 = new Student(16, "Alice");
        Student student2 = new Student(16, "Bob");
        Student student3 = new Student(17, "Cherry");
        Student student4 = new Student(17, "Delivery");
        List<Student> studentList = new ArrayList<>();
        studentList.add(student1);
        studentList.add(student2);
        studentList.add(student3);
        studentList.add(student4);
        // List to Map<Object, List>
        // 1. 首先使用`Collectors.groupingBy()根据某个字段进行分组`
        // 2. 分组的同时使用`Collectors.mapping()`将分组后的数据组织起来
        Map<Integer, List<String>> map = studentList.stream()
                .collect(
                        Collectors.groupingBy(Student::getAge,
                        Collectors.mapping(Student::getName, Collectors.toList())));
        System.out.println(map);

        // 这里将分组后的数据组织成一个Map
        Map<Integer, Map<String, Student>> map2 = studentList.stream()
                .collect(
                        Collectors.groupingBy(Student::getAge,
                                Collectors.toMap(Student::getName, student -> student)));
        System.out.println(map2);
    }
}

class Student {

    private String name;

    private Integer age;

    Student(Integer age, String name) {
        this.age = age;
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

输出:

# map1
{
	16 = [Alice, Bob], 17 = [Cherry, Delivery]
}

# map2
{
	16 = {
		Bob = Student {
			name = 'Bob', age = 16
		},
		Alice = Student {
			name = 'Alice', age = 16
		}
	}, 17 = {
		Cherry = Student {
			name = 'Cherry', age = 17
		},
		Delivery = Student {
			name = 'Delivery', age = 17
		}
	}
}

我的个人博客有空来坐坐

https://www.wangyanan.online

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值