gpt4 book ai didi

java - 通过与另一个 Set 中的键匹配来添加 Map 中的 BigDecimals

转载 作者:行者123 更新时间:2023-12-01 17:50:37 25 4
gpt4 key购买 nike

我有一张 map ,其中销售数字除以年份:

Map<Integer, BigDecimal> sales_by_year = new TreeMap<>();
sales_by_year.put(2012, BigDecimal.valueOf(19283));
sales_by_year.put(2013, BigDecimal.valueOf(24832));
sales_by_year.put(2014, BigDecimal.valueOf(19562));
sales_by_year.put(2015, BigDecimal.valueOf(21879));
sales_by_year.put(2016, BigDecimal.valueOf(23587));
sales_by_year.put(2017, BigDecimal.valueOf(28756));

以及我想要将这些销售额相加的年份列表:

Set<Integer> years = new HashSet<>(Arrays.asList(new Integer[] {2012, 2013, 2014}));

我想编写一个 lambda 将这些年份组合成一个 BigDecimal。我写的是:

BigDecimal sales_for_timeframe = sales_by_year.entrySet().stream()
.filter(a -> years.contains(a.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))
.values().stream()
.reduce(BigDecimal.ZERO, BigDecimal::add);

System.out.println(sales_for_timeframe);

并且它有效。但这是最有效的方法吗?这个解决方案:

  1. 将 map 转换为流
  2. 过滤 map
  3. 将其收集回新 map
  4. 将新 map 的 valueSet 转换为流
  5. 将值减少为单个 BigDecimal

有没有办法减少步骤数?这样做会提高效率吗?或者这是最好的解决方案?

最佳答案

你可以稍微缩短它:

BigDecimal sum = years.stream()
.map(y -> sales_by_year.getOrDefault(y, BigDecimal.ZERO))
.reduce(BigDecimal.ZERO, BigDecimal::add);

关于java - 通过与另一个 Set 中的键匹配来添加 Map 中的 BigDecimals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557999/

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