通过将值与数组中的现有键相加来构造 HashMap 而不覆盖键

Ram*_*ana 2 java spring java-8 spring-boot

我正在尝试从数组下方构造一个 HashMap

product: [
 {
  id: 12345
  qty: 5
 },
 {
  id: 12345
  qty: 6
 },
 {
  id: 98765
  qty: 10
 }
]
Run Code Online (Sandbox Code Playgroud)

代码:

HashMap<Long, Integer> productMap = new HashMap<>();
int totalQty = 0;

for (Product product : products) {
 Long id = product.getId();
 if (productMap.containsKey(id)) {
  productMap.put(id, totalQty + productMap.get(id).intValue());
 } else {
  productMap.put(id, totalQty);
 }
}
Run Code Online (Sandbox Code Playgroud)

从上面的方法中,我正在检查地图中的键,如果是,则通过覆盖现有键将 qty 添加到 totalQty 中,任何在对值求和时不覆盖的最佳方法?

Had*_*i J 5

你可以这样做:

products.stream().collect(toMap(Product::getId,Product::getQty,Intger::sum));
Run Code Online (Sandbox Code Playgroud)

  • @拉马纳是的。我假设 @Hadi J 使用了“java.util.stream.Collectors.toMap”的静态导入。 (3认同)