繁体   English   中英

我可以将ArrayList中的Java值分配给不同的变量而无需对大小进行硬编码吗?

[英]Can I assign Java values from an ArrayList to different variables without hardcoding the size?

我有一个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);

这个来源肯定是一个糟糕的代码设计。 如果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本身,并使用您用于变量的默认值来填充它。

最简单的方法是:

Object[] vars = myArrayList.toArray(new Object[5]);

如果您坚持使用变量var1到var5而不是仅使用数组元素,请将数组元素复制到变量中。 或者,您可以将“= varN”代码中的所有实例替换为“= myArrayList.get(n)”。

如何使用单独的数组并为循环中的列表上的相应值分配每个数组的值?

for (i = 0; i<= 5; i++) {
var [i] = myArrayList.indexOf(i);
}

我同意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;

所描述的设计看起来很丑陋。 您可以使用三元运算符达到预期目的:

var1 = myArrayList.size() > 0 ? myArrayList.get(0) : "null";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM