gpt4 book ai didi

Java 在一个窗口大小的周期内进行计数(例如 size=3)

转载 作者:行者123 更新时间:2023-12-03 11:17:14 26 4
gpt4 key购买 nike

给定下面的类和数据结构,我想计算每个连续 3 个元素的计数总和,类似于以下结果:

public class SaleTxn {
private int id;
private String txnDate;
private int amount;

}
数据如下
 id   txnDate        amount
1 2018-10-10 100
2 2018-10-11 200
3 2018-10-12 100
4 2018-10-13 100
5 2018-10-14 200
6 2018-10-15 200
... ...
并且窗口大小为 3,表示只是过去 3 个元素的总和,预期结果如下
2018-10-10 ~ 2018-10-12   Total: 100+200+100 = 400
2018-10-13 ~ 2018-10-14 Total: 100+200+200 = 500
...
我在下面有一个列表代码:
List<SaleTxn> myList; //
myList.stream().filter(x -> ??????)
.mapToInt(SouthboundShareholding::getAmount)
.sum();
我该如何实现?

最佳答案

我认为核心问题是分区列表,如果您可以使用Google Guava,这将非常简单,如下面的代码:
代码:

List<SaleTxn> saleTxns = new ArrayList<>();
saleTxns.add(new SaleTxn(1, "2018-10-10", 100));
saleTxns.add(new SaleTxn(2, "2018-10-11", 200));
saleTxns.add(new SaleTxn(3, "2018-10-12", 100));
saleTxns.add(new SaleTxn(4, "2018-10-13", 100));
saleTxns.add(new SaleTxn(5, "2018-10-14", 200));
saleTxns.add(new SaleTxn(6, "2018-10-15", 200));

// implement of filter
saleTxns = saleTxns.stream().filter(saleTxn -> true).collect(Collectors.toList());

// partition the list and sum all value
List<Integer> result = Lists.partition(saleTxns, 3).stream()
.mapToInt(value -> value.stream().mapToInt(SaleTxn::getAmount).sum())
.boxed()
.collect(Collectors.toList());

System.out.println(result);
代码输出:
[400, 500]

关于Java 在一个窗口大小的周期内进行计数(例如 size=3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65716864/

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