gpt4 book ai didi

java - 有没有办法让下面的代码更通用?

转载 作者:行者123 更新时间:2023-12-03 01:45:28 24 4
gpt4 key购买 nike

我正在使用 gson 来序列化/反序列化和 java 8 流。以下是代码片段,

private long sumofTime() {
Line[] lines = gson.fromJson(jsonString, Line[].class);
return Arrays.stream(lines).filter(x -> x.hasTime())
.mapToInt(x -> x.getTime).sum();
}

线路类看起来像,

public class Line {
String name;
String stamp;
Integer time;
Integer xx;
Integer yy;
Integer zz;
...
...

boolean hasTotalTime() {
return totalTime != null;
}
...
getters...setters...}

Stream 用于检查每个数组元素(即 Line)的特定变量(例如上例中的时间)是否不为空,然后获取所有时间的总和。

问题:Line对象中有大约30个变量需要求和,那么如何使解决方案更通用,而不是为每个变量编写一个sum方法。请注意,有超过 1000 个 Line 对象需要处理,这就是为什么我认为 Stream 会更好。

最佳答案

您可以将一个函数传递到 sum 方法中,以获取要求和的每一行的值:

public int sumLines(Function<Line, Integer> extractor){
Line[] lines = ...
return Arrays.stream(lines).map(extractor)
.filter(Objects::nonNull).mapToInt(i -> i).sum();
}
....
int time = sumLines(Line::getTime);

这假设如果属性不存在,函数将返回 null,但如果情况不存在,您也可以传入 Predicate 进行过滤。

关于java - 有没有办法让下面的代码更通用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351223/

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