在 Java 中更新 MultiKeyMap 中特定键的值
Updating value of particular keys in MultiKeyMap in Java
我试图在 Java 中更新 MultiKeyMap
中特定键集的值,但不知道如何操作。
假设我想更新 (key1, key2, value1) 具有不同值 (key1, key2, value2) 的同一组键。
如果我简单地执行 put in MultiKeyMap
然后它会创建新行并且不会更新值。 replace()
也不起作用。
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections4.map.LinkedMap;
import org.apache.commons.collections4.map.MultiKeyMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
List<Double> list11 = new ArrayList<Double>();
list11.add((double) 3);
list11.add((double) 5000);
List<Double> list22 = new ArrayList<Double>();
list22.add((double) 7);
list22.add((double) 2000);
MultiKeyMap<String, List<Double>> multiKeyMap = new MultiKeyMap<String, List<Double>>();
multiKeyMap.put("sourcecode11", "basecode11", "productcode11", list11);
multiKeyMap.put("sourcecode22", "basecode22", "productcode22", list22);
String source = "sourcecode11";
String base = "basecode11";
String product = "productcode11";
if (multiKeyMap.containsKey(source, base, product)) {
List<Double> fees = multiKeyMap.get(source, base, product);
Double count = fees.get(0);
Double amount = fees.get(1);
count +=1;
amount+=500;
List<Double> list33 = new ArrayList<Double>();
list33.add(count);
list33.add(amount);
multiKeyMap.
multiKeyMap.replace(source, base, product, list33);
}
}
}
替换函数出错
not applicable for the arguments (String, String, String, List<Double>)
请提供更新 MultiKeyMap 值的解决方案。
maven 依赖:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
这令人困惑。您正在通过获取 'count' 和 'amount'、递增它们然后 附加 递增的值作为两个 来处理列表 'fees'将新 值添加到列表中。请告诉我们那里发生了什么。
同样令人担忧的是,您似乎将 List 视为某种数据封装 class。
您可以使用 put 来用新值列表替换 (key1,key2,key3)。
您的代码 运行 与此示例相符
List<Double> list11 = new ArrayList<>();
List<Double> list22 = new ArrayList<>();
list22.add((double) 7);
list22.add((double) 2000);
MultiKeyMap<String, List<Double>> multiKeyMap = new MultiKeyMap<>();
multiKeyMap.put("sourcecode11", "basecode11", "productcode11", list11);
multiKeyMap.put("sourcecode22", "basecode22", "productcode22", list22);
String source = "sourcecode22";
String base = "basecode22";
String product = "productcode22";
if (multiKeyMap.containsKey(source, base, product)) {
List<Double> fees = multiKeyMap.get(source, base, product);
System.out.println("before :" + multiKeyMap);
Double count = fees.get(0);
Double amount = fees.get(1);
count += 1;
amount += 500;
List<Double> list33 = new ArrayList<>();
list33.add(count);
list33.add(amount);
multiKeyMap.put(source, base, product, list33);
System.out.println("after :" + multiKeyMap);
}
我试图在 Java 中更新 MultiKeyMap
中特定键集的值,但不知道如何操作。
假设我想更新 (key1, key2, value1) 具有不同值 (key1, key2, value2) 的同一组键。
如果我简单地执行 put in MultiKeyMap
然后它会创建新行并且不会更新值。 replace()
也不起作用。
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections4.map.LinkedMap;
import org.apache.commons.collections4.map.MultiKeyMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
List<Double> list11 = new ArrayList<Double>();
list11.add((double) 3);
list11.add((double) 5000);
List<Double> list22 = new ArrayList<Double>();
list22.add((double) 7);
list22.add((double) 2000);
MultiKeyMap<String, List<Double>> multiKeyMap = new MultiKeyMap<String, List<Double>>();
multiKeyMap.put("sourcecode11", "basecode11", "productcode11", list11);
multiKeyMap.put("sourcecode22", "basecode22", "productcode22", list22);
String source = "sourcecode11";
String base = "basecode11";
String product = "productcode11";
if (multiKeyMap.containsKey(source, base, product)) {
List<Double> fees = multiKeyMap.get(source, base, product);
Double count = fees.get(0);
Double amount = fees.get(1);
count +=1;
amount+=500;
List<Double> list33 = new ArrayList<Double>();
list33.add(count);
list33.add(amount);
multiKeyMap.
multiKeyMap.replace(source, base, product, list33);
}
}
}
替换函数出错
not applicable for the arguments (String, String, String, List<Double>)
请提供更新 MultiKeyMap 值的解决方案。
maven 依赖:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
这令人困惑。您正在通过获取 'count' 和 'amount'、递增它们然后 附加 递增的值作为两个 来处理列表 'fees'将新 值添加到列表中。请告诉我们那里发生了什么。
同样令人担忧的是,您似乎将 List 视为某种数据封装 class。
您可以使用 put 来用新值列表替换 (key1,key2,key3)。 您的代码 运行 与此示例相符
List<Double> list11 = new ArrayList<>();
List<Double> list22 = new ArrayList<>();
list22.add((double) 7);
list22.add((double) 2000);
MultiKeyMap<String, List<Double>> multiKeyMap = new MultiKeyMap<>();
multiKeyMap.put("sourcecode11", "basecode11", "productcode11", list11);
multiKeyMap.put("sourcecode22", "basecode22", "productcode22", list22);
String source = "sourcecode22";
String base = "basecode22";
String product = "productcode22";
if (multiKeyMap.containsKey(source, base, product)) {
List<Double> fees = multiKeyMap.get(source, base, product);
System.out.println("before :" + multiKeyMap);
Double count = fees.get(0);
Double amount = fees.get(1);
count += 1;
amount += 500;
List<Double> list33 = new ArrayList<>();
list33.add(count);
list33.add(amount);
multiKeyMap.put(source, base, product, list33);
System.out.println("after :" + multiKeyMap);
}