Arrays.asList()存在问题

3

我有一个非常简单的程序,只需要检查数组中是否有一个值。 我有一个叫做 bulkBean 的类。这就是它。

public class bulkBean {
   private int installmentNo;
   private double amount;

    public int getInstallmentNo() {
        return installmentNo;
    }

    public void setInstallmentNo(int installmentNo) {
        this.installmentNo = installmentNo;
    }

    public double getAmount() {
        return amount;
    }

    public void setAmount(double amount) {
        this.amount = amount;
    }

}

现在我的程序中有一个bulkBean类型的数组,这是我的程序:

import java.util.Arrays;

public class test {

    public static boolean scan_bulkList(bulkBean[] bulkList, int i) {

        int[] arr = new int[bulkList.length];

        for(int x=0;x<bulkList.length;x++){
            arr[x] = bulkList[x].getInstallmentNo();
        }

        for(int j = 0; j< arr.length ;j++){

            System.out.println("INFO: array "+j+" = "+arr[j]);

        }

        if (Arrays.asList(arr).contains(i) == true) {
            return true;
        } else {
            return false;
        }

    }

    public static void main(String[] arg){

        bulkBean bb1 = new bulkBean();
        bb1.setInstallmentNo(1);
        bb1.setAmount(5500);

        bulkBean bb2 = new bulkBean();
        bb2.setInstallmentNo(2);
        bb2.setAmount(4520);

        bulkBean[] bulkArray = new bulkBean[2];
        bulkArray[0] = bb1;
        bulkArray[1] = bb2;

        boolean a = scan_bulkList(bulkArray,1);
        System.out.println("val = "+a);

    }
}

我创建了2个bulk bean实例并为它们设置了值。然后将这两个实例添加到一个数组中。然后将该数组传递给方法以检查一个值(也作为参数给出,在此情况下为1)。如果数组包含该值,则应返回true,否则返回false。无论我输入什么值,它都返回false。为什么会出现这个问题?


1
你知道吗,你可以直接返回 Arrays.asList(arr).contains(i) - Alexander_Winter
请执行sopln(Arrays.asList(arr)),检查您是否获得了正确的列表,并遵循@Alexander_Winter的建议。 - Shoaib Chikate
@Alexander_Winter - 这不会起作用。 - TheLostMind
int[] arr = new int[bulkList.length]; 更改为 Integer[] arr = new Integer[bulkList.length]; - Alexander_Winter
一个类似的问题 - http://stackoverflow.com/questions/26333486/lookup-of-a-number-in-an-array/ - Eran
4个回答

4
< p > Arrays.asList() 返回一个仅有一个元素的列表 - 一个数组。 因此,您实际上是在与一个数组进行比较。 您需要对数组中的每个值进行比较。 < / p >

Arrays.asList(arr) 将 arr={1,24,54,23,456} 作为参数传递,而不是单个值。它将把这个数组转换成列表 [1,24,54,23,456]。 - Shoaib Chikate
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - TheLostMind
4
+1 同意。我认为将“int[] arr = new int[bulkList.length];”更改为“Integer[] arr = new Integer[bulkList.length];”会使列表包含 Integer 而不是一个 int[] 数组。 - Eng.Fouad
@TheLostMind,我不明白你说的话。 - vigamage
2
@Eng.Fouad - 那应该是一个答案 :P - TheLostMind
@user3892439 - Arrays.asList()方法返回仅包含一个元素的列表。此元素是元素数组。即,列表不包含数组元素,而是包含该数组。请使用Eng.Fouad的评论并更改您的代码。 - TheLostMind

2
如TheListMind所说,对于一个int[]数组,使用Arrays.asList()可以得到包含该数组的列表。
个人建议直接构造列表而非构造数组,甚至更好的方法是在迭代大块数组时进行测试(无需实例化数组):
for(int x=0;x<bulkList.length;x++){
    if (bulkList[x].getInstallmentNo() == i){
         return true;     
    }
}
return false;

谢谢,如果您像这样编辑它,“bulkList[i].getInstallmentNo() == i”变成“bulkList[x].getInstallmentNo() == i”,那就正确了。无论如何,感谢您。 - vigamage
写得太快通常是不好的。感谢overline。 - yunandtidus

1
您在这里犯了一个错误,您创建了 int 数组,它必须是 Integer 数组,因为 Arrays.asList().contains(Object o); 使输入参数也成为 Integer(Integer i)int 不是对象, Integer 是对象。希望它能正常工作。
int[] arr = new int[bulkList.length];

转换为中文:

变成:

Integer[] arr = new Integer[bulkList.length];

0
将方法更改如下以避免复杂性:
public static boolean scan_bulkList(bulkBean[] bulkList, int i) {

        int[] arr = new int[bulkList.length];

        for(int x=0;x<bulkList.length;x++){
            arr[x] = bulkList[x].getInstallmentNo();
            if (bulkList[x].getInstallmentNo()==i) {
                return true;
            }                             
        }
   return false;

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接