list转map的三种方法
    随着Java8版本的发布,Java 8 Stream API供了一系列的方法和工具可以帮助程序员们更高效的处理集合数据,比如List转Map操作,可以使用stream api一系列的操作完成。
    List转Map是一个常见的转换操作,它是把List集合中的元素转换为key和value构建Map集合。Java 8 Stream API 中常用三种方法完成List转Map操作,它们分别是collectingAndThen()方法,toMap()方法、groupingBy()方法。
    1.CollectingAndThen()方法:
    CollectingAndThen()方法是收集流元素然后做一个操作,它接收两个参数,第一参数是一个收集器,它定义了怎么收集流中的数据;第二个参数是一个函数,它定义了收集完数据后的操作,它接受第一参数的收集结果作为输入,返回一个新的结果。因此,如果我们要使用该方法来实现List转Map的操作,需要指定第一个参数的收集器,例如:List(),用来把List中的元素收集为List;第二参数函数,它定义了收集完List后转换为Map的操作,如下代码所示:
    List<Student> studentList = new ArrayList<>();
    //集流中元素到集合中
    Map<String, Student> studentMap = studentList.stream().List(), Collections::unmodifiableMap));
    2.toMap()方法:
    toMap()方法是根据List中的元素建立Map,它接收三个参数,第一参数定义了如何根据List中的元素构造Map中的key;第二参数定义了如何根据List中的元素构造Map中的value;第三参数定义了如果出现重复的key应该怎么处理,后面的元素会覆盖前面的元素。
    假设我们有一个Student类,如下所示:
    public class Student {
java stream
    private String name;
    private int age;
    //略其他属性和get、set方法
    }
    我们想把上述Student类型的List转换为Map,key是name,value是age,可以使用toMap()方法,如下代码所示:
    List<Student> studentList = new ArrayList<>();
    //定如何根据Student的属性构建map的key和value,以及出现重复key时如何处理
    Map<String, Integer> studentMap = studentList.stream().Map(Student::getName, Student::getAge, (v1, v2) -> v2));
    3.groupingBy()方法
    groupingBy()方法是根据 List 中的元素分组,它接收两个参数,第一参数定义了如何根据List中的元素分组;第二参数定义了分组后如何聚合分组后的数据,可以是收集器、值、函数等。
    假设我们有多个Student类型的List,如下所示:
    List<Student> studentList = new ArrayList<>();
    我们想把上述Student类型的List转换为Map,key是name,value是Student集合,可以使用groupingBy()方法,如下代码所示:
    //定如何根据Student的name属性分组,以及分组后的值
    Map<String, List<Student>> studentMap = studentList.stream().upingBy(Student::getName));
    以上就是Java 8 Stream API中常用的三种方法实现List转Map的操作,这些方法可以让程序员们快速便捷的完成List转Map操作,使得数据处理变得更有效率。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。