gpt4 book ai didi

java - 获取 Map 's value object' 字段的总和

转载 作者:行者123 更新时间:2023-11-29 05:34:18 25 4
gpt4 key购买 nike

我得到一个 Map 对象:

Map<String, Shop>> shopData = GET_SHOP_DATA();

Shop 类由两个字段组成:

public class Shop{
private String name;
int salesPerDay

...
}

获取所有商店salesPerDay总和有效方法是什么? (我知道我可以遍历 Map 对象并进行求和),我的意思是没有循环。

我知道我可以通过 shopData.values() 获得一个 Collection 对象。是否有可能在不循环的情况下从那里获取总和?

最佳答案

执行此操作的现代方法称为 ma​​p-reduce它是 Java 8 的一部分,您可以在其中一行完成,但也有框架提供这个。在此处搜索“map reduce”。

W.r.t. map-reduce 你可能会发现这篇文章很有用:Simple Java Map/Reduce framework

Java 8

在 Java 8 中,解决方案看起来像这样(一行!)

shopData.values().stream().map(s -> s.saledPerDay).sum();

这里

  • shopData.values() 生成 Shop 对象的集合
  • stream() 使其成为 Shop 对象的流
  • map(s -> s.saledPerDay) 使其成为整数流
  • sum() 总结一下。

因为您要求的是“效率”。可以并行执行此操作(使用多核机器的功能)并且它只是

shopData.values().parallelStream().map(s -> s.saledPerDay).sum();

这既快速又简洁。

Java 6/7

如果您喜欢在 Java 6/7 中执行此操作,那么您可能会使用一个库。例如,jedi 提供了一个 reduce,下面的例子实际上或多或少是你需要的: http://jedi.codehaus.org/javadoc/jedi/functional/FunctionalPrimitives.html#reduce%28java.lang.Iterable,%20jedi.functional.Functor2%29

关于java - 获取 Map 's value object' 字段的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20045062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com