一、基本介紹
Java中的Map可以看作是一種鍵值對映射的數據結構,它提供了一組方法來操作數據結構中的元素。在Java 8中,Map API得到了一些更新,這些更新增加了一些新的方法和默認方法,使得Map在使用上變得更加方便和簡潔。
下面是基本的Map操作示例:
Map map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); System.out.println(map.get("key1")); // 輸出:value1 System.out.println(map.size()); // 輸出:3 map.forEach((key, value) -> System.out.println(key + " : " + value)); // 輸出:key1 : value1,key2 : value2,key3 : value3
二、遍歷Map的新方法
Java8對Map的一個重大改進是提供了forEach方法,該方法允許我們使用lambda表達式來遍歷Map。
Map forEach方法接受一個BiConsumer類型的參數,該參數是一個函數接收兩個參數:鍵和值。可以使用lambda表達式來實現這個函數。下面是一個示例:
Map map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.forEach((key, value) -> System.out.println(key + " : " + value)); // 輸出:key1 : value1,key2 : value2,key3 : value3
當然,如果我們僅需要遍歷鍵或值,我們也可以使用Map.keySet()或Map.values()方法。下面是一個演示:
Map map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.keySet().forEach(key -> System.out.println(key)); // 輸出:key1,key2,key3 map.values().forEach(value -> System.out.println(value)); // 輸出:value1,value2,value3
三、使用Stream來操作Map
Java8的Stream API為我們提供了一種更加簡潔、可讀性更高的方式來遍歷和操作集合。
對於Map來說,我們可以使用Map.entrySet()方法來獲取Map中的所有鍵值對。下面是一個演示:
Map map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.entrySet() .stream() .filter(entry -> entry.getKey().startsWith("key")) .forEach(entry -> System.out.println(entry.getKey() + " : " + entry.getValue())); // 輸出:key1 : value1,key2 : value2,key3 : value3
在這個示例中,我們使用了Stream.filter()方法來選擇我們感興趣的鍵值對,我們在這裡選擇的鍵是以「key」開頭的鍵值對。接着,我們使用forEach()方法來遍歷選擇出的鍵值對。
四、使用Map.compute()方法
Java8中的Map API提供了一些新的方法,其中一些方法可以用來替換已有的鍵值對或者添加新的鍵值對。Map.compute()方法就是其中之一。
Map.compute()方法接受兩個參數,第一個是鍵,第二個是一個BiFunction類型的函數接口,該接口接受兩個參數,鍵和值,並返回一個新的值。
如果指定的鍵不存在,Map.compute()方法將會添加這個鍵值對到Map中。如果指定的鍵存在,Map.compute()方法將會替換這個鍵值對。下面是一個演示:
Map map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.compute("key1", (key, value) -> value + "-modified"); map.compute("key4", (key, value) -> "value4"); map.forEach((key, value) -> System.out.println(key + " : " + value)); // 輸出:key1 : value1-modified,key2 : value2,key3 : value3,key4 : value4
在這個示例中,我們使用Map.compute()方法對鍵為「key1」的鍵值對進行了替換操作。由於我們指定了一個新的函數,這個函數接受舊的值並返回修改後的值,因此,這個鍵值對的值被修改了。接着,我們使用Map.compute()方法添加了一個新的鍵值對「key4:value4」。最後,我們使用Map.forEach()方法來遍歷所有的鍵值對。
五、使用Map.merge()方法
Map.merge()方法也可以用來替換已有的鍵值對或者添加新的鍵值對,並且它與Map.compute()方法有一些明顯的區別。
Map.merge()方法接受三個參數,第一個是鍵,第二個是一個新值,第三個是一個BinaryOperator類型的函數接口,該接口接受兩個參數,舊值和新值,並且返回一個新的值。
如果指定的鍵不存在,Map.merge()方法將會添加一個新的鍵值對到Map中。如果指定的鍵存在,Map.merge()方法將會替換這個鍵值對。在這個情況下,該函數接口將會接受舊的值和新的值,然後根據需要將它們合併成一個新的值。下面是一個演示:
Map map = new HashMap(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.merge("key1", "new-value", (oldValue, newValue) -> oldValue + "-" + newValue); map.merge("key4", "value4", (oldValue, newValue) -> oldValue + "-" + newValue); map.forEach((key, value) -> System.out.println(key + " : " + value)); // 輸出:key1 : value1-new-value,key2 : value2,key3 : value3,key4 : value4
在這個示例中,我們使用Map.merge()對鍵為「key1」的鍵值對進行了替換操作。由於我們指定了一個新的函數,這個函數將會將舊的值和新的值合併為一個新的值。同時,我們使用Map.merge()方法添加了一個新的鍵值對「key4:value4」,這個方法同樣使用了一個合併函數來處理重複的鍵的情況。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/297232.html