gpt4 book ai didi

java - getter/setter 的递归函数?

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:51 25 4
gpt4 key购买 nike

我正在寻找一种 Java 算法,该算法创建一个对象,该对象的属性设置为对象字符串的第一个非空值。考虑这个数组(为了简单起见,我将使用 JSON 语法来表示数组):

{
"objects": [
{
"id": 1,
"val1": null,
"val2": null,
"val3": 2.0
},
{
"id": 2,
"val1": null,
"val2": 3.8,
"val3": 6.0
},
{
"id": 3,
"val1": 1.98,
"val2": 1.8,
"val3": 9.0
}
]
}

最后,我想要一个看起来像这样的对象:

{
"id": 1,
"val1": 1.98,
"val2": 3.8,
"val3": 2.0
}

其中 val1 来自第三个对象,val2 来自第二个对象,val3id 来自第一个对象,因为这些是在属性不为空的情况下找到的第一个对象。

到目前为止,我在 Java 中所做的以及真正有效的是:

    // Java code that proceeds a deserialized representation of the 
// above mentioned array
int k = 0;
while (bs.getVal1() == null) {
k++;
bs.setVal1(objectArray.get(k).getVal1());
}

但是,我并不满意,因为我必须将这段代码写四次(getId, getVal1, getVal2, getVal3).我确信必须有一个相当通用的方法。有没有 Java 大师可以给 Java 初学者一个建议?

最佳答案

在回答您的实际问题之前,这里有一种编写现有循环的更好方法:(将 Object 替换为任何实际类型)

for (Object o : objectArray) {
Double d = o.getVal1();
if (d != null) {
bs.setVal1(d);
break;
}
}

考虑到您的对象现在的布局方式,没有比这更好的方法了。但是,如果您更改对象的结构,您可以做得更好。

一种方法是将不同的值字段(val1、val2、...)放入一个数组中:

Double val[] = new Double[3]; // for 3 val fields

public Double getVal(int index) {
return val[index];
}

public void setVal(int index, Double value) {
val[index] = value;
}

然后您可以简单地通过索引访问字段,并在对象数组的一次迭代中设置 bs 的所有字段:

for (Object o : objectArray) {
for (int i = 0; i < 3; i++) {
Double d = o.getVal(i);
if (d != null) {
bs.setVal(i, d);
break;
}
}
}

关于java - getter/setter 的递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3644443/

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