0

我有一个Java代码:

for(Iterator it = c.getArrayList().iterator(); it.hasNext(); ) {
    Object i = it.next();

    // Here I have an error, i is not a boolean
    if (i) {
        System.out.format("Delete %s%n", i);
        it.remove();
    }
    else {
        System.out.println("End");
        break;
    }
}

但是该if子句会引发错误。它期望booleanObject被给予。Java 不能转换类型,对吧?

我如何更改类型或我必须在if子句中添加什么才能使其正常工作?

升级版:

它是字符串的集合(一个 ArrayList)。

Object i = it.next();   // I get one element from collection.
if (i) {   // check if it's not the end, if it's not the last element of the collection
4

7 回答 7

3

您是否正在尝试测试它是否为空?

if (i != null) {
    System.out.format("Delete %s%n", i);
    it.remove();
}
else {
    System.out.println("End");
    break;
}

如果您正在检查 的布尔值i并且ArrayList是 a List<Boolean>,那么您可以使用Iterator<Boolean> it,但您仍然必须小心空指针异常。


编辑:如果要在End删除所有非空字符串时打印,则可以删除else块并Endfor循环后打印。

于 2012-12-26T14:23:19.130 回答
1

幸运的是 Iterator 有一个hasNext()功能。

所以你会使用:

Object i = null;
if(it.hasNext()){
    i = it.next();
}else{
    //done.
}
//Do stuff with i.
于 2012-12-26T14:24:23.877 回答
1

不清楚你想测试什么。

如果要测试对象是否存在,则检查 null:

if (i==null)

如果要检查某些属性,请转换为特定类型

if(((MyClass)i).iDontWantLoLive()) 

如果对象是布尔值,则转换为布尔值:

if((Boolean)i)  
于 2012-12-26T14:26:42.893 回答
1

Java 是一种强类型语言。如果你想要/期望布尔值,那么做这样的事情......

        List<Boolean> list = new ArrayList<Boolean>();
    for (Iterator<Boolean> it = list.iterator(); it.hasNext(); ) {
        boolean i = it.next();

        if (i) {
            System.out.format("Delete %s%n", i);
            it.remove();
        }
        else {
            System.out.println("End");
            break;
        }
    }

否则,如果您只是想基于它为空来删除某些东西,那么('if (i==null)' 正如其他人所建议的那样)。

于 2012-12-26T14:28:47.070 回答
1

您的“End”输出表明您希望在最后执行此操作。您可以改为这样做。

List list = c.getArrayList();
for(Object o: list)
    System.out.println("Delete " + o);
list.clear();
System.out.println("End");

注意:format只返回一个您要丢弃的字符串。

于 2012-12-26T14:35:28.110 回答
1

这是删除列表最后一个元素的一种非常缓慢的方法。相反,使用

list.remove(list.size() - 1);
于 2012-12-26T14:40:58.223 回答
0

是的,Java 不会自动强制类型。您将不得不手动将其Object转换为Boolean.

于 2012-12-26T14:23:28.973 回答