list转map的三种方法

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 + '\'' +

                    '}';

        }


    }

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


        }

    }

  3. 3

    若是实体类中没有独一的标识,可以利用数组下标来作为key

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

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

    }

第二种:利用guava将list调集转map

  1. 1

    代码如下所示:

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


    }

    }

  2. 2

    测试成果如下所示:

第三种:利用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);


        }

    }

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

        }

    }

注重事项

  • jdk1.8
  • 若有更好的体例和弥补请在经验下提出!
  • 发表于 2019-08-03 00:29
  • 阅读 ( 1938 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
联系我们:uytrv@hotmail.com 问答工具