gpt4 book ai didi

使用 lambda 的 List<> 的 Java8 子列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:27 25 4
gpt4 key购买 nike

我有一个问题,我觉得它非常适合流和/或 lambda。另一方面,我不想使它过于复杂,但由于将在许多变体中使用这种特定技术(在子列表上运行函数),我想要一些关于如何从一开始就把它做好的想法。

我有一个 List<Product> productList .

我希望能够遍历 productList 中的所有子列表.例如所有大小为 30 的子列表。然后应该将此子列表用作函数的参数。

这是我目前的、幼稚的解决方案:

List<Product> products=...
// This example uses sublists of size 30
for (int i = 0; i < products.size() - 29; i++) {
// sublist start index is inclusive, but end index is exclusive
List<Product> sublist = products.subList(i, i + 30);
Double res = calc(sublist);
}

// an example of a function would be moving average

这将如何使用 lambda 实现?

编辑我试图想出最简单的例子来说明问题。经过一些评论,我意识到一个完美的例子是计算移动平均线。第一个 MAVG 在子列表 [0..29] 上计算,第二个在 [1..30] 上计算,第三个在 [2..31] 上计算,依此类推。

最佳答案

除非我遗漏了一些明显的东西......

IntStream.range(0, products.size() - 29)
.mapToObj(i -> products.subList(i, i + 30))
.map(list -> calc(list))
.forEach... // or any other terminal op

好吧,如果您想对这些子列表运行多个函数,例如:

double result = calc(sublist)
log(sublist) // void
double res = diffCalc(sublist)

您可能不会继续使用通常的 for 循环。

map 操作在子列表上执行单个操作,它可以在流中执行更多操作,但在我看来,这看起来真的很难看。

关于使用 lambda 的 List<> 的 Java8 子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192354/

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