我在使Java流按照我想要的方式工作时遇到了很大的问题。我有一个包含字段的类:title(string),value(BigDecimal)。我以列表的形式获得此类的对象。列表中的标题不是唯一的,我想获得标题所在的列表唯一,并且相同标题(输入列表)的值相加。
所以我做了类似的事情:
Map<String, BigDecimal> groupedAndSummed = inputList.stream()
.collect(Collectors.groupingBy(MyClass::getTitle,
Collectors.reducing(BigDecimal.ZERO, MyClass::getValue, BigDecimal::add)));
从我发现的 - 这样的代码应该返回标题是键的Map(因此它们是唯一的),值是值,但是对于相同的键,它们是相加的。我也试过了:
Map<String, BigDecimal> groupedAndSummed = inputList.stream()
.collect(Collectors.toMap(MyClass::getTitle, MyClass::getValue, BigDecimal::add));
从我的观点来看,应该做同样的事情。所以,再一次,我获得了包含对象的列表,这些对象可以具有相同的标题。我希望获得列表中包含标题唯一的对象,对于具有相同标题的初始对象,我想要复制值的总和。我一直在寻找解决方案,我这样做的方式应该有效,但事实并非如此。我得到具有不同标题的对象列表,但是他们的值没有求和。对于该标题,它总是简单地从要求总和的总和中得到的第一个值。我不知道我做错了什么。当我手动执行它时,我使用类似
的东西sum = sum.add(object.getValue());
整个循环后总和还可以。问题是,我正在寻找自动方式来做,在循环中没有一些嵌套循环检查可疑条件。我希望它能与流一起工作。有人可以帮忙吗?