我有一个ArrayList,我们会说它最多可以是5号。我想将第一个元素分配给var1,第二个元素分配给var2,第三个元素分配给var3等。
但是,有时ArrayList的项目少于5个,在这种情况下,我不会为某些变量赋值。
所以我的问题是,有没有比这更好的方法:
if (myArrayList.size() > 0)
var1 = myArrayList.get(0);
if (myArrayList.size() > 1)
var2 = myArrayList.get(1);
if (myArrayList.size() > 2)
var3 = myArrayList.get(2);
if (myArrayList.size() > 3)
var4 = myArrayList.get(3);
if (myArrayList.size() > 4)
var5 = myArrayList.get(4);
答案 0 :(得分:12)
这个来源肯定是一个糟糕的代码设计。如果arraylist不包含该字段(稍后你使用它),你还要初始化变量是什么?一个更大的例子或者你正在尝试做什么在这里会有所帮助。通常只使用
但我至少可以想到两种方法:
switch(myArrayList.size()) {
case 5:
var4 = myArrayList.get(4);
case 4:
var3 = myArrayList.get(3);
case 3:
var2 = myArrayList.get(2);
// and so on
}
或只是使用try / catch。
try {
var0 = myArrayList.get(0);
var1 = myArrayList.get(1);
}
catch(IndexOutOfBoundsException ex){
}
但是大多数情况下,最好使用arraylist本身,并使用您用于变量的默认值来填充它。
答案 1 :(得分:3)
最简单的方法是:
Object[] vars = myArrayList.toArray(new Object[5]);
如果您坚持使用变量var1到var5而不是仅使用数组元素,请将数组元素复制到变量中。或者,您可以将“= varN”代码中的所有实例替换为“= myArrayList.get(n)”。
答案 2 :(得分:1)
我同意Voo的看法,这很可能来自糟糕的代码设计。但这是我展示我对最终变量和三元表达式的热爱的机会。 :-) 这个怎么样? (对于yuks,我假设是一个字符串的ArrayList。)
final Iterator<String> iter = myArrayList.iterator();
final String var1 = iter.hasNext() ? iter.next() : null;
final String var2 = iter.hasNext() ? iter.next() : null;
final String var3 = iter.hasNext() ? iter.next() : null;
final String var4 = iter.hasNext() ? iter.next() : null;
final String var5 = iter.hasNext() ? iter.next() : null;
答案 3 :(得分:1)
如何使用单独的数组并为循环列表中的相应值分配每个数组的值?
for (i = 0; i<= 5; i++) {
var [i] = myArrayList.indexOf(i);
}
答案 4 :(得分:0)
所描述的设计看起来很难看。您可以使用三元运算符来实现所需目的:
var1 = myArrayList.size() > 0 ? myArrayList.get(0) : "null";