Map.merge() 文档说:



例如,此代码应计算篮子中每种类型的水果数量:

public static void main(String[] args) {
    Map<String, Integer> fruitCounts = new HashMap<>();
    List<String> fruitBasket = Arrays.asList(
        "Apple", "Banana", "Apple", "Orange", "Mango", "Orange", "Mango", "Mango");
    for (String fruit : fruitBasket) {
        fruitCounts.merge(fruit, 1/*First fruit of this type*/, (k, v) -> v + 1);
    }
    System.out.println(fruitCounts);
}

有 2 个苹果、3 个芒果、2 个橙子和 1 个香蕉,但实际输出为:
{Apple=2, Mango=2, Orange=2, Banana=1}

怎么了?

最佳答案

问题就在这里

(k, v) -> v + 1

你应该做
(k, v) -> k + v

如果您检查合并的实现,它说,remappingFunction.apply(oldValue, value); 意味着现有值将是第一个参数,您应该在其中添加与初始化它相同的数字,该数字作为该函数的第二个参数。

更新

10-02 22:29