jdk8流list轉Map


/**
 * 
 */
package com.chuanglan.demo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author Maq.
 * @createTime 2019年10月29日 下午4:33:38
 *
 */
public class ListToMapDemo {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>(
                  Arrays.asList(
                          new Student("張三", 18, "b1"),
                          new Student("王二", 20, "b2"),
                          new Student("李四", 18, "b3")
                  )
            );
//        源碼
//        public static <T, K, U>
//        Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
//                                        Function<? super T, ? extends U> valueMapper) {
//            return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
//        }
            Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getName, Student::getGrade));
            Map<String, Student> map2 = list.parallelStream().collect(Collectors.toMap(studen->{return studen.getName();},  stude->{return stude;})); //或者
            //Map<String, Student> map2 = list2.stream().collect(Collectors.toMap(Student::getName, Function.identity()));
            Map<String, Integer> map3 = list.stream().collect(Collectors.toMap(item -> item.getName(), item -> item.getAge(),(oldVal, currVal) -> currVal,ConcurrentHashMap::new));
            


       Map<String, Integer> map6 = list.stream().collect(Collectors.toMap(item -> "111", item ->2,(oldVal, currVal) -> currVal,ConcurrentHashMap::new));

        map6.forEach( (k ,v)->{
          System.out.println("k6: " + k + " v6:" + v);
        }); 

       map.forEach( (k ,v)->{
                System.out.println("k: " + k  + "   v:" + v);
            });
            map2.forEach( (k ,v)->{
                System.out.println("k: " + k  + "   v:" + v.getAge());
            });
            //key沖突 錯誤信息java.lang.IllegalStateException: Duplicate key b3
            List<Student> list2 = new ArrayList<>(
                      Arrays.asList(
                              new Student("張三", 18, "b1"),
                              new Student("王二", 20, "b2"),
                              new Student("李四", 18, "b3"),
                              new Student("李四", 18, "b4")
                      )
                );
                Map<String, Student> map4 = list2.stream().collect(Collectors.toMap(Student::getName, Function.identity(),
                        (existing, replacement) -> existing)); //這樣配置的話,發生沖突是existing會替代replacement
                //多個屬性為key
                Map<String, Student> map5 = list2.stream().collect(Collectors.toMap(student -> student.getName()+student.getAge() , student->student, (existing, replacement) -> existing)); //這樣配置的話,發生沖突是existing會替代replacement
                
                map4.forEach( (k ,v)->{
                    System.out.println("k: " + k  + "   v:" + v.getGrade());
                });
                map5.forEach( (k ,v)->{
                    System.out.println("k: " + k  + "   v:" + v.getGrade());
                });
                
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM