arraylist—数组列表中对象值的总和(java)

yftpprvb  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(409)

我有这样的密钥/值

  1. ("A", 2.2);
  2. ("A", 1.1);
  3. ("B", 4.0);
  4. ("B", 2.0);
  5. ("C", 2.5);
  6. ("A", 2.0);
  7. ("A", 2.2);
  8. ("A", 1.0);

我希望结果是

  1. A=3.3
  2. B=6.0
  3. C=2.5
  4. A=5.2

我试过密码

  1. static LinkedHashMap<String, Double> map = new LinkedHashMap<String, Double>();
  2. public static void putAndIncrement(String key, double value) {
  3. Double prev = map.get(key);
  4. Double newValue = value;
  5. if (prev != null) {
  6. newValue += prev;
  7. }
  8. double roundOff = Math.round(newValue * 10.0) / 10.0;
  9. map.put(key,roundOff);
  10. }

然而结果是

  1. A=8.5
  2. B=6.0
  3. C=2.5

hashmap、map、linkedhashmap不是获得预期结果的正确方法。对于这种情况,你能请教我其他的方法吗?请帮助我如何得到或任何建议是真正有帮助的我。谢谢您

q9rjltbz

q9rjltbz1#

LinkedHashMap 仍然是一个 Map ,这意味着键是唯一的。Map上不能有两个 "A" 同时使用钥匙。
如果要对连续键的值求和,则需要使用 List 使用用于存储密钥/值对的类:

  1. static List<KeyValue> list = new ArrayList<>();
  2. public static void putAndIncrement(String key, double value) {
  3. KeyValue keyValue = (list.isEmpty() ? null : list.get(list.size() - 1));
  4. if (keyValue == null || ! key.equals(keyValue.getKey())) {
  5. list.add(new KeyValue(key, value));
  6. } else {
  7. keyValue.addValue(value);
  8. }
  9. }
  1. public final class KeyValue {
  2. private final String key;
  3. private double value;
  4. public KeyValue(String key, double value) {
  5. this.key = key;
  6. this.value = value;
  7. }
  8. public void addValue(double value) {
  9. this.value += value;
  10. }
  11. public String getKey() {
  12. return this.key;
  13. }
  14. public double getValue() {
  15. return this.value;
  16. }
  17. @Override
  18. public String toString() {
  19. return this.key + "=" + this.value;
  20. }
  21. }

测试

  1. putAndIncrement("A", 2.2);
  2. putAndIncrement("A", 1.1);
  3. putAndIncrement("B", 4.0);
  4. putAndIncrement("B", 2.0);
  5. putAndIncrement("C", 2.5);
  6. putAndIncrement("A", 2.0);
  7. putAndIncrement("A", 2.2);
  8. putAndIncrement("A", 1.0);
  9. System.out.println(list);

输出

  1. [A=3.3000000000000003, B=6.0, C=2.5, A=5.2]
展开查看全部

相关问题