• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    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
    • 閱讀 ( 1937 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆