Вопрос:
У меня есть код в 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 вызывает ошибку. Он ожидает boolean но Object задан. Java не может преобразовывать типы, не так ли?
Как мне изменить тип или что мне нужно включить в предложение if, чтобы он работал правильно?
UPD:
Это коллекция (ArrayList) строк.
Object i = it.next(); // I get one element from collection. if (i) { // check if it not the end, if it not the last element of the collection Лучший ответ:
Вы пытаетесь проверить, является ли оно нулевым?
if (i != null) { System.out.format(«Delete %s%n», i); it.remove(); } else { System.out.println(«End»); break; }
Если вы проверяете логическое значение i а ArrayList – это List<Boolean>, тогда вы можете использовать Iterator<Boolean> it, но вам все равно нужно быть осторожным с исключениями из null-указателей.
Edit: Если вы хотите напечатать End когда все ненулевые строки удалены, вы можете удалить блок else и просто распечатать End после цикла for.
Ответ №1
Luckly Iterator имеет функцию hasNext().
Таким образом, вы будете использовать:
Object i = null; if(it.hasNext()){ i = it.next(); }else{ //done. } //Do stuff with i. Ответ №2
Неясно, что вы хотите проверить.
Если вы хотите проверить, присутствует ли объект, проверьте значение null:
if (i==null)
Если вы хотите проверить какое-либо свойство, то переведите его в определенный тип
if(((MyClass)i).iDontWantLoLive())
Если объекты имеют значение boolean, то для boolean:
if((Boolean)i) Ответ №3
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; } }
В противном случае, если вы просто пытаетесь удалить что-то на основании этого значения null, то (‘if (i == null)’, как предложили другие).
Ответ №4
Ваш вывод “End” предполагает, что вы хотите сделать это в конце. Вы можете сделать это вместо этого.
List list = c.getArrayList(); for(Object o: list) System.out.println(«Delete » + o); list.clear(); System.out.println(«End»);
Примечание: format просто возвращает строку, которую вы отбрасываете.
Ответ №5
Это очень медленный способ удалить последний элемент списка. Вместо этого используйте
list.remove(list.size() — 1); Ответ №6
Да, Java не будет автоматически принуждать типы. Вам придется вручную перевести Object в Boolean.
Ответ №7
Если вы просто хотите удалить последний элемент списка, вы можете сделать это:
list.remove(list.size() — 1);