#java #foreach
#java #foreach
Вопрос:
На данный момент у меня есть следующий код:
/*
* This method adds only the items that don’t already exist in the
* ArrayCollection. If items were added return true, otherwise return false.
*/
public boolean addAll(Collection<? extends E> toBeAdded) {
// Create a flag to see if any items were added
boolean stuffAdded = false;
// Use a for-each loop to go through all of the items in toBeAdded
for (something : c) {
// If c is already in the ArrayCollection, continue
if (this.contains(c)) { continue; }
// If c isn’t already in the ArrayCollection, add it
this.add(c)
stuffAdded = true;
}
return stuffAdded;
}
}
Мой вопрос таков: чем мне заменить что-либо (и c), чтобы заставить это работать?
Комментарии:
1. this.contains()? реализует ли ваш объект Collection?
2. @Cosmin, вероятно, поскольку он реализует
addAll
здесь 🙂
Ответ №1:
Что-то вроде этого должно делать:
// Use a for-each loop to go through all of the items in toBeAdded
for (E c : toBeAdded) {
// If c is already in the ArrayCollection, continue
if (this.contains(c)) {
continue;
}
// If c isn’t already in the ArrayCollection, add it
this.add(c);
stuffAdded = true;
}
Общая форма такова:
for (TypeOfElements iteratorVariable : collectionToBeIteratedOver) `
Комментарии:
1. Вам не нужно
this
перед вызовами методов.
Ответ №2:
Написать foreach на Java довольно просто.
for(ObjectType name : iteratable/array){ name.doSomething() }
Вы можете выполнить foreach либо с помощью итерации, либо с массивом. Имейте в виду, что если вы не проверяете тип вашего итератора (Iterator), то вам нужно использовать Object для ObjectType. В противном случае используйте любое значение E. Например
ArrayList<MyObject> al = getObjects();
for(MyObject obj : al){
System.out.println(obj.toString());
}
Для вашего случая:
for(E c : toBeAdded){
// If c is already in the ArrayCollection, continue
if( this.contains(c) ){ continue;}
// If c isn’t already in the ArrayCollection, add it
this.add(c)
stuffAdded = true;
}
Комментарии:
1. * не тор повторения, а итера ble .
Ответ №3:
E — это коллекция, c — переменная внутри цикла for (E c : добавлено дополнительно) …
Комментарии:
1. E не является коллекцией. E — это тип переменной в цикле.
Ответ №4:
public boolean addAll(Collection<? extends E> toBeAdded) {
boolean stuffAdded = false;
for(E c : toBeAdded){
if(!this.contains(c)){
this.add(c)
stuffAdded = true;
}
}
return stuffAdded;
}
Также взгляните на Collections.addAll
Комментарии:
1. Это
addAll
метод, который он реализует! 😀2. Извините. Я просто думаю, что лучше использовать некоторый набор в качестве внутреннего хранилища.
3. Вы уверены? Даже если вы работали в Sun и вам было поручено реализовать
ArrayList
?4. Нет, конечно 🙂 Я могу предположить, что для этого случая может быть реализована коллекция.
Ответ №5:
Вы можете написать цикл foreach двумя способами, и они эквивалентны.
List<Integer> ints = Arrays.asList(1,2,3);
int s = 0;
for (int n : ints) { s = n; }
for (Iterator<Integer> it = ints. iterator(); it.hasNext(); ) {
int n = it.next();
s = n;
}