如何在同一密钥HashMap Java中求和值?
我需要对同一个键中的值求和,而不仅仅是替换?谢谢如何在同一密钥HashMap Java中求和值?,java,hashmap,Java,Hashmap,我需要对同一个键中的值求和,而不仅仅是替换?谢谢 LinkedHashMap<String, LinkedHashMap<String, Integer>> users = new LinkedHashMap<>(); for (int i = 0; i < n; i++) { String[] input = scanner.readLine().split("\\s+"); String ip = in
LinkedHashMap<String, LinkedHashMap<String, Integer>> users = new LinkedHashMap<>();
for (int i = 0; i < n; i++) {
String[] input = scanner.readLine().split("\\s+");
String ip = input[0];
String name = input[1];
int duration = Integer.parseInt(input[2]);
if (!users.containsKey(name)) {
users.put(name, new LinkedHashMap<>());
users.get(name).put(ip,duration);
} else {
users.get(name).put(ip,duration);
}
}
我相信这是你的答案 试试这个:
for (int i = 0; i < n; i++) {
String[] input = scanner.readLine().split("\\s+");
String ip = input[0];
String name = input[1];
int duration = Integer.parseInt(input[2]);
if (!users.containsKey(name)) {
users.put(name, new LinkedHashMap<>());
users.get(name).put(ip, duration);
} else {
LinkedHashMap<String, Integer> user = users.get(name);
Integer userDuration = user.get(ip);
user.put(ip, userDuration + duration);
}
}
我相信这是你的答案 试试这个:
for (int i = 0; i < n; i++) {
String[] input = scanner.readLine().split("\\s+");
String ip = input[0];
String name = input[1];
int duration = Integer.parseInt(input[2]);
if (!users.containsKey(name)) {
users.put(name, new LinkedHashMap<>());
users.get(name).put(ip, duration);
} else {
LinkedHashMap<String, Integer> user = users.get(name);
Integer userDuration = user.get(ip);
user.put(ip, userDuration + duration);
}
}
不幸的是,由于我从手机输入,我无法添加完整的代码段,但我相信,如果您以后需要初始映射,我只需使用“流”和“合并”来收集,或者如果您不需要,我只需将其合并即可。不幸的是,由于我从手机输入,我无法添加完整的代码段,但我相信,如果您以后需要初始贴图,您只需使用“流”和“合并”进行收集,或者如果您不需要,只需“合并”而不是“放置”,您可以在外部贴图中使用,也可以在内部贴图中使用:
Map<String, Map<String, Integer>> users = new LinkedHashMap<>();
for (int i = 0; i < n; i++) {
String[] input = scanner.readLine().split("\\s+");
String ip = input[0];
String name = input[1];
int duration = Integer.parseInt(input[2]);
users.computeIfAbsent(name, k -> new LinkedHashMap<>())
.merge(ip, duration, Integer::sum);
}
您可以在外部贴图中使用,也可以在内部贴图中使用:
Map<String, Map<String, Integer>> users = new LinkedHashMap<>();
for (int i = 0; i < n; i++) {
String[] input = scanner.readLine().split("\\s+");
String ip = input[0];
String name = input[1];
int duration = Integer.parseInt(input[2]);
users.computeIfAbsent(name, k -> new LinkedHashMap<>())
.merge(ip, duration, Integer::sum);
}
使用一个映射,其中您的类具有名称、ip和累积持续时间。将addDurationint duration方法添加到类中,以将持续时间添加到累积的持续时间中。Java是一种面向对象语言。使用类。这也会使你的代码更清晰、更快。谢谢你的建议,但目的是解决没有类的问题,我正在尝试:使用一个地图,在地图上你的类有一个名称、一个ip和一个累积的持续时间。将addDurationint duration方法添加到类中,以将持续时间添加到累积的持续时间中。Java是一种面向对象语言。使用类。这将使您的代码更加清晰和快速,谢谢你的建议,但目的是解决没有类的问题,我正在尝试:不确定这里的设置,但如果有相同的名称和不同的ip,这将抛出一个空点Yes you's right thread main java.lang.NullPointerException中的异常我有一个以上的答案,在这种情况下应该对你有用不确定设置这里,但如果有相同的名称和不同的ip,这将抛出一个空点Yes you is right thread main java.lang.NullPointerException中的异常我有一个以上的答案,在这种情况下应该对你有用你是上帝,我正等着这个答案。简单地说,我想通过名称而不是IP来求和,因为一个用户可以通过不同的IP进行计算。非常感谢!你是上帝,我正等着这个答案。简单地说,我想通过名称而不是IP来求和,因为一个用户可以通过不同的IP进行计算。非常感谢!