Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Модификация коллекции внутри foreach / 11 сообщений из 11, страница 1 из 1
12.01.2007, 21:33:29
    #34253012
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация коллекции внутри foreach
Вопрос такой -- можно ли модифицировать коллекцию, используемую в самом цикле foreach или стоит забить на преимущества 1.5 и по-старинке перебирать все обычным for? Вот код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public  List<X> findOpenXList() {
	
	List<X> xList = XDao.getAll();
	
	 for  (X x : xList) {
	    
	     if  (!x.isOpen()) {
		xList.remove(x);
	    }
	}
	
	 return  xList;
    }
...
Рейтинг: 0 / 0
12.01.2007, 21:36:41
    #34253016
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация коллекции внутри foreach
Возможно я неясно описал проблему- в общем если использовать такой код -- то выскакивает ексепшн конкурентной модификации, можно как-то с этим бороться? может сталкивались с этим напишите код решения не важно на 1.5 или на 1.4
...
Рейтинг: 0 / 0
12.01.2007, 21:38:58
    #34253022
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация коллекции внутри foreach
В принципе проблему решил используя копию списка ведется перебор по исходной коллекции а удаляется из копии.потом исходная коллекция подменяется копией. А интересно можно как-нибудь без копии обойтись?
...
Рейтинг: 0 / 0
12.01.2007, 22:06:14
    #34253035
Модификация коллекции внутри foreach
Я всегда делал так (у меня 1.4):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Collection originalData = foo.getCollection();
Collection data =  new  ArrayList();
 for  (Iterator iter = originalData.iterator(); iter.hasNext(); ){
 CustomObj element = (CustomObj) iter.next();
  if  (element.isValid()){
  data.add(element);
 }
}
 return  data;
...
Рейтинг: 0 / 0
12.01.2007, 22:16:33
    #34253044
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация коллекции внутри foreach
Интересно. Спасибо за совет. Нужно попробовать
...
Рейтинг: 0 / 0
12.01.2007, 23:00:30
    #34253072
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация коллекции внутри foreach
...
Рейтинг: 0 / 0
13.01.2007, 00:08:45
    #34253104
Модификация коллекции внутри foreach
crazytoo
Вот z вам привел ссылку, в которой объясняется (как и в любой книге), что модицифировать итерируемую коллекцию нельзя.
...
Рейтинг: 0 / 0
13.01.2007, 00:12:29
    #34253105
Модификация коллекции внутри foreach
Модифицировать в плане изменения количества элементов, разумеется.
...
Рейтинг: 0 / 0
13.01.2007, 00:19:18
    #34253108
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация коллекции внутри foreach
меня даже анрегом забанили :(( crazytoo
Вот z вам привел ссылку, в которой объясняется (как и в любой книге), что модицифировать итерируемую коллекцию нельзя.
Можно. Если пользоваться синтаксисом 1.4:
Код: plaintext
1.
2.
3.
4.
5.
6.
 for  (Iterator i = coll.iterator();i.hasNext();) {
    MyClass m = i.next();
     if  ((m.shallBeDeleted()) {
        i.remove();
    }
}
...
Рейтинг: 0 / 0
13.01.2007, 00:32:10
    #34253115
Модификация коллекции внутри foreach
Век живи, век учись...
...
Рейтинг: 0 / 0
13.01.2007, 14:20:01
    #34253439
crazytoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация коллекции внутри foreach
Всем спасибо за советы. На самом деле это был не мой код- меня просто перекинули на JUnit тесты и изза этой конструкции все время вываливалось, так вот я и подумал правильно ли он написан - теперь все подправил и заработало
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Модификация коллекции внутри foreach / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]