在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 |