作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 java 8 从列表中创建一个新集合,并在此过程中累加总和。
源列表由如下所示的对象组成:
class Event {
String description;
double sum;
}
使用这样的示例列表:
{ { "desc1", 10.0 }, {"desc2", 14.0 }, {"desc3", 5.0 } }
结果列表应该是这样的
我知道如何求和以获得最终总和,在本例中为 29.0,但我想创建结果列表并同时累加总和。
我如何用 Java8 做到这一点?
最佳答案
您可以通过实现自己的收集器来执行映射和求和来实现此目的。您的流式传输代码如下所示:
List<SummedEvent> summedEvents = events.stream().collect(EventConsumer::new, EventConsumer::accept, EventConsumer::combine).summedEvents();
summedEvents.forEach((se) -> System.out.println(String.format("%s, %2f, %2f", se.description, se.sum, se.runningTotal)));
为此,我假设了一个新类 SummedEvent
,它也包含运行总计。然后你的收集器类将像这样实现:
class EventConsumer {
private List<SummedEvent> summedEvents = new ArrayList<>();
private double runningTotal = 0;
public void accept(Event event) {
runningTotal += event.sum;
summedEvents.add(new SummedEvent(event.description, event.sum, runningTotal));
}
public void combine(EventConsumer other) {
this.summedEvents.addAll(other.summedEvents);
this.runningTotal += other.runningTotal;
}
public List<SummedEvent> summedEvents() {
return summedEvents;
}
}
关于list - Java 8 - 积累和创建新的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048739/
我有一个应用程序不断从 TCP/IP 端点接收 XML 消息流。收到每条消息后,应用程序将其内容消化到一组核心数据实体中。这是通过三个上下文结构实现的: 大师(私有(private)队列) Main(
boost docs以此作为如何使用 boost::accumulate 的示例: // The data for which we wish to calculate statistical pro
我是一名优秀的程序员,十分优秀!