在Java 8中的Map.Entry
接口中增長了comparingByKey
, comparingByValue
方法,它們都返回Comparator<Map.Entry<K,V>>
, Comparator
是一個函數接口,主要是方便Lambda表達式的使用。git
在Java 8中的Map
接口增長了一些default方法,提高了對key, value操做的便利性。下面是基本數據的定義,經過這些數聽說明新增的一些方法。github
1 |
Map<Integer, String> map = new HashMap<>(); |
若是指定的key存在,則返回該key對應的value,若是不存在,則返回指定的值。例子以下app
1 |
// key爲4不存在,輸出 d |
遍歷Map
中的全部Entry, 對key, value進行處理, 接收參數 (K, V) -> void
, 例子以下函數
1 |
// 輸出1a, 2b, 3c |
替換Map
中全部Entry的value值,這個值由舊的key和value計算得出,接收參數 (K, V) -> V
, 相似以下代碼spa
1 |
for (Map.Entry<K, V> entry : map.entrySet()) |
例如以下:code
1 |
map.replaceAll((key, value) -> (key + 1) + value); |
若是key關聯的value不存在,則關聯新的value值,返回key關聯的舊的值,相似以下代碼接口
1 |
V v = map.get(key); |
示例代碼以下:rem
1 |
map.putIfAbsent(3, "d"); |
接收2個參數,key和value,若是key關聯的value值與指定的value值相等(equals
),則刪除這個元素,相似代碼以下:get
1 |
if (map.containsKey(key) && Objects.equals(map.get(key), value)) { |
示例代碼以下:string
1 |
map.remove(1, "b"); |
若是key關聯的值與指定的oldValue的值相等,則替換成新的newValue,相似代碼以下:
1 |
if (map.containsKey(key) && Objects.equals(map.get(key), value)) { |
示例代碼以下
1 |
map.replace(3, "a", "z"); |
若是map中存在key,則替換成value值,不然返回null
, 相似代碼以下:
1 |
if (map.containsKey(key)) { |
示例代碼以下:
1 |
// 輸出舊的值, a |
若是指定的key不存在,則經過指定的K -> V
計算出新的值設置爲key的值,相似代碼以下:
1 |
if (map.get(key) == null) { |
示例代碼以下:
1 |
map.computeIfAbsent(1, key -> key + " computed"); |
若是指定的key存在,則根據舊的key和value計算新的值newValue, 若是newValue不爲null
,則設置key新的值爲newValue, 若是newValue爲null
, 則刪除該key的值,相似代碼以下:
1 |
if (map.get(key) != null) { |
示例代碼以下:
1 |
map.computeIfPresent(1, (key, value) -> (key + 1) + value); |
compute
方法是computeIfAbsent
與computeIfPresent
的綜合體。
若是指定的key不存在,則設置指定的value值,不然根據key的舊的值oldvalue,value計算出新的值newValue, 若是newValue爲null
, 則刪除該key,不然設置key的新值newValue。相似以下代碼:
1 |
V oldValue = map.get(key); |
示例代碼以下:
1 |
// 存在key爲1, 輸出 a merge |