【发布时间】:2019-11-12 19:47:09
【问题描述】:
我有一个包含一些包私有成员变量的对象,我将它们添加到另一个对象的 Google Sheets v4 ValueRange 中。当前的代码看起来有点像这样:
List<List<Object>> data = new ArrayList<>();
...
/**
* Sets all the values in the ValueRange member variable
* @return the ValueRange object
*/
ValueRange requestBuilder() {
...
//For each case, add it to the value range
for (int i = 0; i < closedCases.size(); i++) {
data.add(
Arrays.asList(
closedCases.get(i).number,
closedCases.get(i).priority,
closedCases.get(i).firstResp,
closedCases.get(i).accName,
closedCases.get(i).subject,
closedCases.get(i).assigned,
closedCases.get(i).lastUpdated,
closedCases.get(i).daysOld,
closedCases.get(i).jiraCase
)
);
}
vr.setValues(data);
return vr;
}
我要回答的问题是,有没有办法做 Arrays.asList(closeCases.get(i)) 或在案例对象上添加某种方法来简单地填充所有这些东西,而不是而不是调用 Arrays.asList() 中的每个成员变量。我也知道我可以使用 foreach,但仍需要使用相同的符号来添加项目,这是我试图避免的。
如果有人感兴趣,closedCases 只是一个对象的 ArrayList,其中包含一些字符串和双精度数。
【问题讨论】:
-
还有其他方法可以做到这一点,但所有这些方法都需要在某处拥有这些属性的列表,因此没有更短的方法可以做到这一点。
-
代码显然会受益于不重复九次,比如
closedCases.get(i)表达式。这就是局部变量的用途。或者,正如您自己所说,您可以使用 foreach。仅此一项就可以将代码减半。相反,Arrays.asList不会将完全不相关的字段添加到列表中。什么样的逻辑应该决定哪些字段按什么顺序包含?