首页 > 编程语言 >java 8新特性 list转map

java 8新特性 list转map

时间:2023-06-26 11:22:49浏览次数:51  
标签:map java Map list add Student new

List<Object> 转Map<String,List<String>>

Map<String, List<String>> skillAndList = list.stream().
collect(Collectors.groupingBy(Employee::getSkillId, Collectors.mapping(Employee::getStudent, Collectors.toList())));

List<Object> 转 Map<String, List<Object>> (分组)【以1个字段分/以多个字段分】

//声明一个List集合
List<Student> list = new ArrayList();
list.add(new Student("1001", "小A"));
list.add(new Student("1001", "小B"));
list.add(new Student("1002", "小C"));
list.add(new Student("1003", "小D"));

//将list转map 【key为1个属性,value为相同key的集合】 (以某1个属性来分组,将分组后相同的对象放在一起)
Map<String, List<Student>> map =
list.stream().collect( Collectors.groupingBy(Student::getNo) );


//将list转map 【key为多个属性,value为相同key的集合】 (以多个属性来分组,将分组后相同的对象放在一起)
Map<String, List<Student>> map =
list.stream().collect( Collectors.groupingBy(obj -> obj.getNo + "_" + obj.getName) );

List<Object> 转 Map<String, Object> (返回对象本身)

//声明一个List集合
List<Student> list = new ArrayList();
list.add(new Student("1001", "小A"));
list.add(new Student("1001", "小B"));
list.add(new Student("1002", "小C"));
list.add(new Student("1003", "小D"));

//将list转map 【key为1个属性,value为对象本身】 (map的键去重)
Map<String, Student> map =
list.stream().collect(Collectors.toMap(
Student::getNo,
obj -> obj,
(key1 , key2) -> key1
));

或者

//将list转map 【key为1个属性,value为对象本身】 (map的键去重)
Map<String, Student> map =
list.stream().collect(Collectors.toMap(
Student::getNo,
Function.identity(),
(key1 , key2) -> key1
));

或者

//将list转map 【key为多个属性,value为对象本身】 (map的键去重)
Map<String, Student> map =
list.stream().collect(Collectors.toMap(
obj -> obj.getNo() + "_" + obj.getName(),
obj -> obj,
(key1 , key2) -> key1
));

List<Object> 转 Map<String, String>

//声明一个List集合
List<Student> list = new ArrayList();  
     list.add(new Student("1001", "小A"));  
     list.add(new Student("1001", "小B"));//学号重复(下面特殊处理)
     list.add(new Student("1002", "小C"));
     list.add(new Student("1003", "小D"));
       
//将list转map 【key为1个属性,value为1个属性】  
Map<String, String> map =
    list.stream().collect(Collectors.toMap( 
        Student::getNo, 
        Student::getName,
        (key1 , key2) -> key1  //(map的键重复不会报错,下面已经处理)
    ));
    
//将list转map 【key为多个属性,value为1个属性】  
Map<String, String> map =
    list.stream().collect(Collectors.toMap( 
        obj -> obj.getNo() + "_" + obj.getName(),
        Student::getName,
        (key1 , key2) -> key1   //(map的键重复不会报错,下面已经处理)
));

List<Object1> 转 Map<String, Object2> (返回另一个对象)

//声明一个List集合
List<Student> list = new ArrayList();
    list.add(new Student("1001", "小A"));
    list.add(new Student("1001", "小B"));
    list.add(new Student("1002", "小C"));
    list.add(new Student("1003", "小D"));
 
//将list转map 【key为1个属性,value为另一个对象】 (map的键去重)
Map<String, Teacher> map = 
    list.stream().collect(Collectors.toMap(
        Student::getNo, 
        stu -> {
            Teacher teacher = new Teacher();
            teacher.setNo(stu.getNo());
            teacher.setName(stu.getName());
            return teacher;
        },  
        (key1 , key2) -> key1
));

 

 

标签:map,java,Map,list,add,Student,new
From: https://www.cnblogs.com/xzjf/p/17505167.html

相关文章

  • java陷阱之数据库主从
    现象客户遇到工单缺少描述,查询日志写入描述报错,但那是工单又正常生产  原因先写入工单再查询工单实时性要求比较高的不能走从库,还有就是service层方法命名不规范,不点进去看根本不知道走从库,如果要走从库应该带上Slave后缀,查询缓存也一样带上cachefindProviderIdB......
  • java实际开发中接口文档是自己写还是架构师写?
    软件工程的两种方法下,由后端决定接口都是不对的。第一种软件工程的方法:瀑布模型,自顶而下,逐步细化。接口会变,但是接口要提前设计。接口不是后端开发完成之后才“自然”产生的,那不是自然,而是无序。前后端分离的开发,应该是面向“API”的开发。API的设计并不能由前端或后端一方决定......
  • JavaScript program to check if a given year is leap year Javascript判断是否是闰
    Ayearisleapyeariffollowingconditionsaresatisfied:Yearismultipleof400.Yearismultipleof4andnotmultipleof100.Approach: Getthevalueofinputfieldbyusingdocument.getElementById(“year”).valueCheckthegivenyearisleapyear......
  • java反射之-InvocationHandler使用
    InvocationHandler是Java中的一个接口,是Java反射API的一部分。与Proxy类一起使用,用于动态创建接口的代理实例。在Java中使用Proxy类创建代理对象时,需要提供一个InvocationHandler实现来定义代理对象的行为。InvocationHandler接口只有一个方法,即invoke()方法,它......
  • JavaScript1.8.5新特性系列Object.keys
    以前在js-object这个分类里面也写过keys相关的api 在JavaScript1.8.5中,加入了原生的Object.keys这个api  Object.keys(obj);/*简单举例*/Object.keys({"A":"a","B":"b"});//["A","B"]兼容性写法:  if(!Object.keys){Object.keys=......
  • [转]Java如何对一个对象进行深拷贝
    介绍在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。而深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改变。如下图描述:了解了浅拷......
  • Java学习笔记(十六)
    1.什么是线程?线程是指操作系统中的一种执行单元,它是进程中的一部分,可以看作是轻量级的进程。与进程不同的是,线程共享同一进程的地址空间和系统资源,如打开文件和信号处理等,但每个线程都有自己的程序计数器(PC)和栈,用于执行代码和存储局部变量等数据。2。线程和进程有什么区别?线......
  • python map函数
    map函数是python提供的内嵌函数,所以不需要import,可以直接使用作用是,将第一个参数的功能,作用于第二个参数的每一个元素举例:>>>defsquare(x):#计算平方数...returnx**2...>>>map(square,[1,2,3,4,5])#计算列表各个元素的平方[1,4,9,16,25]......
  • JAVA方法
    java方法原子性​​publicstaticintmax(intnum1,intnum2){  intresult=0;//初始化  if(num1==num2){    System.out.println("num1==num2");    return0;//终止方法 }  if(num1>num2){    result=num1; }else{   ......
  • 6月25日java学习日记
    端午节小休息了几天,断开连接了几天,希望快速状态回到吧,今天了解了部分java异常类,Exceptions类为异常类,学习了throw关键字,以及了解了trycatch的用法(基本与C#相同),同时使用HasgMap以及List.of方法实现了斗地主案例。 ......