java 一个map相同的key累加value

举报
8181暴风雪 发表于 2025/01/21 19:46:53 2025/01/21
【摘要】 在Java中,如果你想要在Map中为相同的key累加value,你可以使用​​Map.merge()​​方法,该方法在Java 8及以上版本中可用。以下是一个简单的例子,展示了如何实现这个功能: import java.util.HashMap;import java.util.Map;public class Main { public static void main(String...

在Java中,如果你想要在Map中为相同的key累加value,你可以使用​​Map.merge()​​方法,该方法在Java 8及以上版本中可用。以下是一个简单的例子,展示了如何实现这个功能: 

import java.util.HashMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        // 添加一些初始数据
        map.put("A", 1);
        map.put("B", 2);
        // 假设我们想要为key "A"累加value 3
        map.merge("A", 3, Integer::sum);
        // 打印结果
        System.out.println(map); // 输出: {A=4, B=2}
        // 再次为key "A"累加value 5
        map.merge("A", 5, Integer::sum);
        // 打印结果
        System.out.println(map); // 输出: {A=9, B=2}
    }
}

在这个例子中,​​merge()​​方法接受三个参数:

  1. ​key​​:要合并的键。
  2. ​value​​:如果键不存在,则将其与该值一起添加到Map中。
  3. ​remappingFunction​​​:如果键已经存在,则使用这个函数来重新映射键的值。在这个例子中,我们使用了​​Integer::sum​​​,它是一个方法引用,对应于​​Integer​​​类的​​sum​​​方法,该方法接受两个​​Integer​​参数并返回它们的和。

每次调用​​merge()​​时,如果指定的key已经存在于Map中,它的value就会与提供的value相加。如果key不存在,它就会被添加到Map中,并设置为提供的value。

如果你想避免使用​​merge()​​​方法来累加Map中相同key的value,你可以使用传统的​​if-else​​​语句或者​​compute()​​​方法来实现相同的功能。以下是两种不使用​​merge()​​方法的方法:

使用传统的if-else语句

import java.util.HashMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        // 添加一些初始数据
        map.put("A", 1);
        map.put("B", 2);
        // 为key "A"累加value 3
        if (map.containsKey("A")) {
            map.put("A", map.get("A") + 3);
        } else {
            map.put("A", 3);
        }
        // 打印结果
        System.out.println(map); // 输出: {A=4, B=2}
        // 再次为key "A"累加value 5
        if (map.containsKey("A")) {
            map.put("A", map.get("A") + 5);
        } else {
            map.put("A", 5);
        }
        // 打印结果
        System.out.println(map); // 输出: {A=9, B=2}
    }
}

使用compute()方法

​compute()​​方法可以在Java 8及以上版本中使用,它可以用来计算key的新value,如果key不存在,则可以使用给定的映射函数来计算新value。

import java.util.HashMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        // 添加一些初始数据
        map.put("A", 1);
        map.put("B", 2);
        // 为key "A"累加value 3
        map.compute("A", (key, value) -> (value == null) ? 3 : value + 3);
        // 打印结果
        System.out.println(map); // 输出: {A=4, B=2}
        // 再次为key "A"累加value 5
        map.compute("A", (key, value) -> (value == null) ? 5 : value + 5);
        // 打印结果
        System.out.println(map); // 输出: {A=9, B=2}
    }
}

在这段代码中,​​compute()​​方法接受两个参数:

  1. ​key​​:要计算的键。
  2. ​remappingFunction​​​:一个接受键和当前value作为参数的函数,如果key不存在,则当前value为null。函数的返回值将成为key的新value。 使用​​​compute()​​​方法可以确保代码的简洁性和功能性的结合,同时避免使用​​merge()​​方法。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。