list转map的三种方法

  • 原创
  • |
  • 浏览:33919
  • |
  • 更新:
  • |
  • 标签:JAVA 

List代表有序集合,有序可重复;

 

Map集合存储键值对;

工具/原料

  • 电脑
  • myeclipse 或者intellij IDEA

第一种:使用for循环将list集合转map

  1. 1

    将一个实体类的list集合转为map

    学生实体类:

    package test;

     

    public class Student {

    private Long id;

        private String age;

     

        public Long getId() {

            return id;

        }

     

        public void setId(Long id) {

            this.id = id;

        }

     

        public String getAge() {

            return age;

        }

     

        public void setAge(String age) {

            this.age = age;

        }

     

        @Override

        public String toString() {

            return "User{" +

                    "id=" + id +

                    ", age='" + age + '\'' +

                    '}';

        }

     

    }

    list转map的三种方法
  2. 2

    转换类编写。

    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) {

            List<Student> StudentList = new ArrayList<Student>();

            Student Student1 = new Student();

            Student1.setId(1L);

            Student1.setAge("12");

     

            Student Student2 = new Student();

            Student2.setId(2L);

            Student2.setAge("13");

     

            StudentList.add(Student1);

            StudentList.add(Student2);

     

            Map<Long, Student> maps = new HashMap<Long, Student>();

            for (Student Student : StudentList) {

            //将属性中的唯一标识作为key

                maps.put(Student.getId(), Student);

            }

     

            System.out.println(maps);

     

        }

    }

    list转map的三种方法
  3. 2
    相关内容未经授权抓取自百度经验
  4. 3

    如果实体类中没有唯一的标识,可以使用数组下标来作为key

    for (int i = 0; i < StudentList.size(); i++) {

    map.put("s"+i, StudentList.get(i));

    }

    END

第二种:使用guava将list集合转map

  1. 1

    第一步:首先学习一下jdk1.8的新特性

    1.1、java jdk1.8新特性Lambda表达式

    1.2、java jdk1.8新特性Stream API

     

    第二步:练习代码如下所示:

    import com.google.common.base.Function;

    import com.google.common.collect.Maps;

     

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Map;

     

    public class ListToMap {

    public static void main(String[] args) {

    List<Student> StudentList = new ArrayList<Student>();

    Student Student1 = new Student();

    Student1.setId(1L);

    Student1.setAge("12");

     

    Student Student2 = new Student();

    Student2.setId(2L);

    Student2.setAge("13");

     

    StudentList.add(Student1);

    StudentList.add(Student2);

     

    Map<Long, Student> maps = Maps.uniqueIndex(StudentList,

    new Function<Student, Long>() {

    @Override

    public Long apply(Student student) {

    return student.getId();

    }

    });

     

    System.out.println(maps);

     

    }

    }

    list转map的三种方法
  2. 2

    测试结果如下所示:

    list转map的三种方法
    END

第三种:使用JDK1.8 将list集合转map

  1. 1

    将一个对象作为value放入map中

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Map;

    import java.util.function.Function;

    import java.util.stream.Collectors;

     

    public class ListToMap {

    public static void main(String[] args) {

            List<Student> StudentList = new ArrayList<Student>();

            Student Student1 = new Student();

            Student1.setId(1L);

            Student1.setAge("12");

     

            Student Student2 = new Student();

            Student2.setId(2L);

            Student2.setAge("13");

     

            Student Student3 = new Student();

            Student3.setId(2L);

            Student3.setAge("14");

     

            StudentList.add(Student1);

            StudentList.add(Student2);

            StudentList.add(Student3);

     

     

            /**

             * List -> Map

             * 需要注意的是:

             * toMap 如果集合对象有重复的key,会报错Duplicate key ....

             *  apple1,apple12的id都为1。

             *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2

             *  或者可以用 (k1,k2)->k2 来设置,如果有重复的key,则保留key2,舍弃key1

             */

            Map<Long, Student> maps = StudentList.stream().collect(Collectors.toMap(Student::getId,Function.identity(), (v1,v2)->v1));

     

            System.out.println(maps);

     

        }

    }

    list转map的三种方法
  2. 2

    将一个对象的属性作为value

     

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Map;

    import java.util.function.Function;

    import java.util.stream.Collectors;

     

    public class ListToMap {

    public static void main(String[] args) {

            List<Student> StudentList = new ArrayList<Student>();

            Student Student1 = new Student();

            Student1.setId(1L);

            Student1.setAge("12");

     

            Student Student2 = new Student();

            Student2.setId(2L);

            Student2.setAge("13");

     

            Student Student3 = new Student();

            Student3.setId(2L);

            Student3.setAge("14");

     

            StudentList.add(Student1);

            StudentList.add(Student2);

            StudentList.add(Student3);

     

            /**

             * List -> Map

             * 需要注意的是:

             * toMap 如果集合对象有重复的key,会报错Duplicate key ....

             *  apple1,apple12的id都为1。

             *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 或者可以用 (k1,k2)->k2 来设置,如果有重复的key,则保留key2,舍弃key1

             */

            Map<Long, String> maps = StudentList.stream().collect(Collectors.toMap(Student::getId,Student::getAge, (v1,v2)->v1));

            System.out.println(maps);

        }

    }

    list转map的三种方法
    END

注意事项

  • jdk1.8
  • 如有更好的方式和补充请在经验下提出!
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部
相关标签JAVA