java8新特性Map的創建與merge


Map集合的創建與merge操作:

     Student student1 = new Student("Johnson",UUID.randomUUID()); Student student2 = new Student("Lily",UUID.randomUUID()); Student student3 = new Student("KangKang",UUID.randomUUID()); //創建 Map<UUID, Student> collect1 = Stream.of(new AbstractMap.SimpleEntry<>(student1.getSid(), student1)).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); Map<UUID, List<Student>> collect2 = Stream.of(new AbstractMap.SimpleEntry<>(student1.getSid(), Lists.newArrayList(student1))).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); Map<UUID, Map<UUID, Student>> collect3 = Maps.newHashMap(); //合並(添加) collect1.merge(student2.getSid(), student2, (oldValue, value) -> value.getSid().compareTo(oldValue.getSid())==0 ? value : oldValue); collect2.merge(student2.getSid(), newArrayList(student2), (oldValue, value) -> Stream.concat(oldValue.stream(), value.stream()).collect(toList())); collect3.merge(student3.getSid(),collect1,(oldValue,value)->{ oldValue.putAll(value); return oldValue; }); static class Student{ private String name; private UUID sid; public Student(String name, UUID sid) { this.name = name; this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public UUID getSid() { return sid; } public void setSid(UUID sid) { this.sid = sid; } }

merge() 可以這么理解:它將新的值賦值到 key (如果不存在)或更新給定的key 值對應的 value,其源碼如下:
   default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
        Objects.requireNonNull(remappingFunction);
        Objects.requireNonNull(value);
        V oldValue = get(key);
        V newValue = (oldValue == null) ? value :
                   remappingFunction.apply(oldValue, value);
        if(newValue == null) {
            remove(key);
        } else {
            put(key, newValue);
        }
        return newValue;
    }
 
         

 

 

 


免責聲明!

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



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