gpt4 book ai didi

Java列表,按3组计算对象的非零属性

转载 作者:行者123 更新时间:2023-11-30 03:20:40 25 4
gpt4 key购买 nike

我有一个ArrayList<Fileline>和里面Fileline一个函数

public Double getValue() {
...
doing stuff
...
return value;
}

我想做的是返回 count任何非零 getValue()一组 3 个文件行。

假设我有 List<Fileline> filelinesfilelines.size() = 12及其各自的getValue()0,0,0, 0,1,2, 0,3,0, 4,5,5然后result我希望是 3,除了第一组之外,所有这些都有效。

如果它是 1 个文件行的组,我可以 filtercount像这样:

long resultCount = filelines.stream().filter(x -> x.getValue() > 0).count();

,但事实上,这是由 3 人一组组成的,这给我带来了问题。

是将列表拆分为多个 3 元素子列表的最佳方法还是更优雅的方法?

最佳答案

您可以按三个将索引范围映射到子列表进行分组,如下所示:

List<Fileline> filtered = IntStream.range(0, list.size()/3)
.mapToObj(n -> list.subList(n*3, n*3+3))
.filter(subList -> subList.stream().anyMatch(fl -> fl.getValue() != 0.0))
.flatMap(List::stream)
.collect(Collectors.toList());

我假设您想要将组展平,因此我添加了 flatMap 步骤。或者,如果您的情况更适合,您可以将它们分组:

List<List<Fileline>> filtered = IntStream.range(0, list.size()/3)
.mapToObj(n -> list.subList(n*3, n*3+3))
.filter(subList -> subList.stream().anyMatch(fl -> fl.getValue() != 0.0))
.collect(Collectors.toList());

如果您只需要对此类组进行计数,请将 collect 步骤替换为 count 并将映射和过滤器合并为单个步骤:

long count = IntStream.range(0, list.size()/3)
.filter(n -> list.subList(n*3, n*3+3).stream().anyMatch(fl -> fl.getValue() != 0.0))
.count();

关于Java列表,按3组计算对象的非零属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31410964/

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