java 8 map_Java 8为Map新增的方法

Java 8 除了为 Map 增加了 remove(Object key, Object value) 默认方法之外,还增加了如下方法。

名称

说明

Object compute(Object key, BiFunction remappingFunction)

该方法使用 remappingFunction 根据原 key-value 对计算一个新 value。只要新 value 不为 null,就使用新 value 覆盖原 value;如果原 value 不为 null,但新 value 为 null,则删除原 key-value 对;如果原 value、新 value 同时为 null,那么该方法不改变任何 key-value 对,直接返回 null。

Object computeIfAbsent(Object key, Function mappingFunction)

如果传给该方法的 key 参数在 Map 中对应的 value 为 null,则使用 mappingFunction 根据 key 计算一个新的结果,如果计算结果不为 null,则用计算结果覆盖原有的 value。如果原 Map 原来不包括该 key,那么该方法可能会添加一组 key-value 对。

Object computeIfPresent(Object key, BiFunction remappingFunction)

如果传给该方法的 key 参数在 Map 中对应的 value 不为 null,该方法将使用 remappingFunction 根据原 key、value 计算一个新的结果,如果计算结果不为 null,则使用该结果覆盖原来的 value;如果计算结果为 null,则删除原 key-value 对。

void forEach(BiConsumer action)

该方法是 Java 8 为 Map 新增的一个遍历 key-value 对的方法,通过该方法可以更简洁地遍历 Map 的 key-value 对。

Object getOrDefault(Object key, V defaultValue)

获取指定 key 对应的 value。如果该 key 不存在,则返回 defaultValue。

Object merge(Object key, Object value, BiFunction remappingFunction)

该方法会先根据 key 参数获取该 Map 中对应的 value。如果获取的 value 为 null,则直接用传入的 value 覆盖原有的 value(在这种情况下,可能要添加一组 key-value 对);如果获取的 value 不为 null,则使用 remappingFunction 函数根据原 value、新 value 计算一个新的结果,并用得到的结果去覆盖原有的 value。

Object putIfAbsent(Object key, Object value)

该方法会自动检测指定 key 对应的 value 是否为 null,如果该 key 对应的 value 为 null,该方法将会用新 value 代替原来的 null 值。

Object replace(Object key, Object value)

将 Map 中指定 key 对应的 value 替换成新 value。与传统 put() 方法不同的是,该方法不可能添加新的 key-value 对。如果尝试替换的 key 在原 Map 中不存在,该方法不会添加 key-value 对,而是返回 null。

boolean replace(K key, V oldValue, V newValue)

将 Map 中指定 key-value 对的原 value 替换成新 value。如果在 Map 中找到指定的 key-value 对,则执行替换并返回 true,否则返回 false。

replaceAll(BiFunction function)

该方法使用 BiFunction 对原 key-value 对执行计算,并将计算结果作为该 key-value 对的 value 值。

下面程序示范了 Map 常用默认方法的功能和用法。

public class MapTest {

public static void main(String[] args) {

Map map = new HashMap();

// 成对放入多个key-value对

map.put("Java入门教程", 10);

map.put("C语言入门教程", 20);

map.put("Python基础教程", 30);

// 尝试替换key为”Go语言入门教程”的 value,由于原 Map 中没有对应的 key

// 因此Map没有改变,不会添加新的key-value对

map.replace("Go语言入门教程", 40);

System.out.println(map);

// 使用原value与传入参数计算出来的结果覆盖原有的value

map.merge("C语言入门教程", 25, (oldVal, param) -> (Integer) oldVal + (Integer) param);

System.out.println(map);

// 当key为"Java"对应的value为null (或不存在)时,使用计算的结果作为新value

map.computeIfAbsent("Java", (key) -> ((String) key).length());

System.out.println(map); // map 中添加了 Java=4 这组 key-value 对

// 当key为"Java"对应的value存在时,使用计算的结果作为新value

map.computeIfPresent("Java", (key, value) -> (Integer) value * (Integer) value);

System.out.println(map); // map 中 Java=4 变成 Java=16

}

}

输出结果为:

{Java入门教程=10, Python基础教程=30, C语言入门教程=20}

{Java入门教程=10, Python基础教程=30, C语言入门教程=45}

{Java=4, Java入门教程=10, Python基础教程=30, C语言入门教程=45}

{Java=16, Java入门教程=10, Python基础教程=30, C语言入门教程=45}

上面程序中注释已经写得很清楚了,而且给出了每个方法的运行结果,读者可以结合这些方法的 API 文档来阅读学习,从而掌握 Map 中默认方法的功能与用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值