在Java 8中将List转换为Map对象方法

假设有一个员工对象:

<b>public</b> <b>class</b> Employee {
  <font><i>// member variables</i></font><font>
  <b>private</b> <b>int</b> empId;
  <b>private</b> String empName;
  <b>private</b> <b>int</b> empAge;
  <b>private</b> String empDesignation;
</font>

将这个员工对象放入LIst集合,如何转为Map? 首先要明确Map的key是什么?

1. 比如式样员工对象的empId作为key,值是员工姓名:

 <font><i>// convert List<Employee> to Map<empId, empName> using Java 8 Streams</i></font><font>
 Map<Integer, String> mapOfEmployees = employees.stream().collect(
    Collectors.toMap(e -> e.getEmpId(),e -> e.getEmpName()));
</font>

2.Map的Key是empId,整个对象为Map的值:

 <font><i>// convert List<Employee> to Map<empId, empName> using Java 8 Streams</i></font><font>
Map<Integer, Employee> mapOfEmployees = employees.stream().collect(
        Collectors.toMap( e -> e.getEmpId(), e -> e));
</font>

3. 如果List中有重复的empId,映射到Map时,Key时不能重复的,如何解决?

默认情况时会抛重复异常,为了克服IllegalStateException重复键异常,我们可以简单地添加一个

BinaryOperator方法到toMap()中,这也称为合并功能,比如如果重复,可以取第一个元素:

Map<Integer, String> mapOfEmployees = employees.stream().collect(
        Collectors.toMap(
            e -> e.getEmpId(),
            e -> e.getEmpName(),
            (e1, e2) -> e1 )); <font><i>// Merge Function</i></font><font>
</font>

4. 将List转换为Map - 使用TreeMap对键进行自然排序,或者指定的Map实现呢?

 Map<Integer, String> mapOfEmployees = employees.stream().collect(
        Collectors.toMap(
            e -> e.getEmpId(),
            e -> e.getEmpName(),
            (e1, e2) -> e1 , <font><i>// Merge Function</i></font><font>
            TreeMap<Integer, String>::<b>new</b>)); </font><font><i>// Map Supplier</i></font><font>
</font>

如果你的TreeMap实现需要加入比较器,将上面代码中TreeMap<Integer, String>::new替换成:

() -> new TreeMap<Integer, String>(new MyComparator())

总结

以上所述是小编给大家介绍的在Java 8中将List转换为Map对象方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Java集合定义与用法实例总结【Set、List与Map】

    本文实例讲述了Java集合定义与用法.分享给大家供大家参考,具体如下: java集合大体可分为三类,分别是Set.List和Map,它们都继承了基类接口Collection,Collection接口定义了众多操作集合的基本方法,如下: 为了访问Collection集合,不得不去了解Iterator接口.该接口很简单,主要用于定义访问集合的方法,如下: 所以上述的三大类子集合必定都继承了上面2个接口.其中Set集合要求元素不重复,且内部无序,所以访问时只能根据元素值来访问:List内部为动态数组,

  • Java三种方法将List转换为Map的实例

    1.for循环 import com.google.common.base.Function; import com.google.common.collect.Maps; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ListToMap { public static void main(String[] args)

  • Json字符串与Object、List、Map的互转工具类

    package com.cq2022.zago.base.util; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.List; import java.util.Map; import org.codehaus.jackson.JsonFactory; import org.codehau

  • java中快速创建带初始值的List和Map实例

    初始化一个List和Map对象并为期加入值的写法如下: List<String> sList = new ArrayList<String>(); sList.add("str1"); sList.add("str2"); Map<String,String> sMap = new HashMap<String, String>(); sMap.put("k1", "v1");

  • Java中List根据map的某个key去重的代码

    话不多说,看代码和效果 /** * 根据map中的某个key 去除List中重复的map * @author shijing * @param list * @param mapKey * @return */ public static List<Map<String, Object>> removeRepeatMapByKey(List<Map<String, Object>> list, String mapKey){ if (CollectionUt

  • 将List集合中的map对象转为List<对象>形式实例代码

    本文实例主要实现将List集合中的map对象转为List<对象>形式,下面是完整代码: import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.bea

  • 详解 Spring注解的(List&Map)特殊注入功能

    详解 Spring注解的(List&Map)特殊注入功能 最近接手一个新项目,已经没有原开发人员维护了.项目框架是基于spring boot进行开发.其中有两处Spring的注解花费了大量的时间才弄明白到底是怎么用的,这也涉及到spring注解的一个特殊的注入功能. 首先,看到代码中有直接注入一个List和一个Map的.示例代码如下: @Autowired private List<DemoService> demoServices; @Autowired private Map<

  • Java中对list map根据map某个key值进行排序的方法

    实例如下所示: package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; public class java_ListMapSort { public static void main(String[] args)

  • 详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for循环,需要注意的是,使用增强for循环无法访问数组下标值,对于集合的遍历其内部采用的也是Iterator的相关方法.如果只做简单遍历读取,增强for循环确实减轻不少的代码量. 集合概念: 1.作用:用于存放对象 2.相当于一个容器,里面包含着一组对象,其中的每个对象作为集合的一个元素出现 3.jav

  • 判断List和Map是否相等并合并List中相同的Map

    List.Set.Map判断两个对象相等的标准 List:通过equals()方法比较返回true即可. HashSet:先比较两个对象hashCode()方法返回的值是否相等,如果不相等就认为两个对象是不相等的,如果两个对象的hashCode相等就继续调用equals()方法进一步判断两个对象是否相等,如果equals()方法返回true认为两个对象相等,返回false认为两个对象不相等. TreeSet:两个对象通过compareTo(Object obj)方法比较是否返回0:如果返回0,则

随机推荐