当前位置: 首页 > 面试题库 >

如何对流中的Map中的值求和?

哈栋
2023-03-14
问题内容

我想要与此等同的流:

public static <T extends Number> T getSum(final Map<String, T> data) {
    T sum = 0;
    for (String key: data.keySet())
        sum += data.get(key);
    return sum;
}

该代码实际上并未编译,因为无法将0分配给T类型,但是您可以理解。


问题答案:

这是另一种方法:

int sum = data.values().stream().reduce(0, Integer::sum);

int不过,总的来说,保罗的回答是减少装箱和拆箱。)

至于 一般而言 ,我认为没有比这更方便的方法了。

我们可以做这样的事情:

static <T> T sum(Map<?, T> m, BinaryOperator<T> summer) {
    return m.values().stream().reduce(summer).get();
}

int sum = MyMath.sum(data, Integer::sum);

但是你总会过夏天。reduce也是有问题的,因为它返回了Optional。上面的sum方法为一个空的映射抛出一个异常,但是一个空的和应该为0。当然,我们也可以传递0:

static <T> T sum(Map<?, T> m, T identity, BinaryOperator<T> summer) {
    return m.values().stream().reduce(identity, summer);
}

int sum = MyMath.sum(data, 0, Integer::sum);


 类似资料:
  • 我有一个地图,里面有另一个HashMap。如何将内部图的值求和并进行比较? 地图的大小也是可以改变的。所以我在寻找一个解决方案,它适用于所有大小的地图。 这些值的值为-->{0,20},{0,9,1}... 我只想把这些值求和,找出最大的一个。

  • 假设我有一个具有方法的存储库,该方法返回的,其中是一个表示美国状态的类,它有两个字段(带有getter/setters):和。 我想获得Flux中所有的填充字段之和。我从Iterable创建了一个Flux,如下所示: 我有我的通量,但我不知道一个好的方法来总结它的价值。我试过 然而,编译器说total“应该是最终的或有效的最终的”。添加显然不会起作用,因为我正在尝试添加。 我如何对通量进行求和(或

  • 我想要一个流的等价物: 这段代码实际上并不编译,因为0不能分配给类型T,但您明白了。

  • 问题内容: 假设我有一本字典,其中的键映射为整数,例如: 是否有返回值的总和在语法上简约的方式-即在这种情况下? 问题答案: 如您所料:

  • 问题内容: 我有一个同时包含键和值的字符串的Map。 数据如下: 我想根据其键对地图进行排序。因此,最后,我将拥有..依此类推。 最终,我试图从该Map中获取两个字符串。 第一个字符串:问题(顺序为1 ..10) 第二个字符串:答案(与问题的顺序相同) 现在,我有以下内容: 这使我的问题成串出现,但顺序不正确。 问题答案: 简短答案 使用。这正是它的目的。 如果将此地图传递给你,并且你无法确定类型

  • 我有这样的想法: 我怎么能把它写在一个流中呢?收集f.e.