java8中Map的騷操作


一 前言

本篇內容是關於 map 新特性的一些方法使用上的介紹,如果有不足之處歡迎補充!!

二 map新特性

關於以下函數式編程的函數的計算知識追尋者都使用 簡單字符串代替了,參數無非就是Key,value;

2.1 forEach

forEach迭代,相當於for循環

    public static void main(String[] args) {
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("key1","小熊貓");
        hashMap.put("key2","大熊貓");
        // 遍歷
        hashMap.forEach((key,value) -> {
            System.out.println("key:"+key + " value: "+value);
        });

    }

輸出

key:key1 value: 小熊貓
key:key2 value: 大熊貓

2.2 computeIfAbsentjava

如果key的值不存在就使用函數結果代替

值存在示例,任然是使用舊值;

  public static void main(String[] args) {
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("key","無墨生香");
        // 如果key的值不存在就使用 函數值代替
        hashMap.computeIfAbsent("key",s-> { return "處處香";});
        // {key=無墨生香}
        System.out.println(hashMap);
    }

值不存在示例,會使用函數值代替為新值;

 public static void main(String[] args) {
     HashMap<String, Object> hashMap = new HashMap<>();
     // 如果key的值不存在就使用 函數值代替
     hashMap.computeIfAbsent("key",s-> { return "處處香";});
     // {key=處處香}
     System.out.println(hashMap);
 }

2.3 computeIfPresent

如果key的值存在就使用函數值代替,如果 函數值為null , 會移除key

值存在示例,會使用函數值代替舊值

   public static void main(String[] args) {
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("key","無墨生香");
        // 如果key的值存在就使用函數值代替
        hashMap.computeIfPresent("key",(key,value)-> { return "處處香";});
        // {key4=處處香}
        System.out.println(hashMap);
    }

值不存在示例,為空

    public static void main(String[] args) {
        HashMap<String, Object> hashMap = new HashMap<>();
        // 如果key的值存在就使用函數值代替
        hashMap.computeIfPresent("key",(key,value)-> { return "處處香";});
        // {}
        System.out.println(hashMap);
    }

如果 函數值為null , 會移除key;

   public static void main(String[] args) {
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("key","無墨生香");
        // 如果key的值存在就使用函數值代替
        hashMap.computeIfPresent("key",(key,value)-> { return null;});
        // {}
        System.out.println(hashMap);
    }

2.4 putIfAbsent

當key的值存在時不替換值;當key的值不存在時替換key的值

當key存在示例,還是舊值;

     public static void main(String[] args) {
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.put("key","無墨生香");
         hashMap.putIfAbsent("key","處處香");
         //{key=無墨生香}
         System.out.println(hashMap);
     }

當key不存在其實就是put操作;

     public static void main(String[] args) {
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.putIfAbsent("key","處處香");
         //{key=處處香}
         System.out.println(hashMap);
     }

2.5 getOrDefault

當key的值存在時獲取值,否則獲取指定的默認值

key值存在示例

   public static void main(String[] args) {
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.put("key","無墨生香");
         //無墨生香
         System.out.println(hashMap.getOrDefault("key","處處香"));
     }

key值不存在示例

   public static void main(String[] args) {
         HashMap<String, Object> hashMap = new HashMap<>();
         //處處香
         System.out.println(hashMap.getOrDefault("key","處處香"));
     }

2.6 merge

如果key的值不存在會用新的值代替,如果key的值存在會用函數值代替舊值,當函數值為空會移除key;

如果key的值不存在會用新的值(第二參數)代替

     public static void main(String[] args) {
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.merge("key","處處香",(key,value) -> { return "點擊在看";});
         //{key=處處香}
         System.out.println(hashMap);
     }

如果key的值存在會用函數值代替舊值;新的值(第二參數)不起作用

    public static void main(String[] args) {
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.put("key","無墨生香");
         hashMap.merge("key","處處香",(key,value) -> { return "點擊在看";});
         //{key=點擊在看}
         System.out.println(hashMap);
     }

當函數值為空會移除key;

    public static void main(String[] args) {
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.put("key","無墨生香");
         hashMap.merge("key","處處香",(key,value) -> { return null;});
         //{}
         System.out.println(hashMap);
     }

求關注關注吖


免責聲明!

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



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