2016-05-09 7 views
1

Допустим, у нас есть этот код:ListIterator решение без использования предыдущего

LinkedList<Integer> myIntegers = new LinkedList<Integer>(); 
ListIterator<Integer> myIntegersIt = myIntegers.listIterator  

myIntegers.add(1); 
myIntegers.add(2); 
myIntegers.add(3); 
myIntegers.add(4); 
myIntegers.add(5); 

LinkedList<Integer> selectedValues = new LinkedList<Integer>(); 

while(myIntegersIt.hasNext()){ 

    if(...some code...){ 
    selectedValues.add(myIntegersIt.next()); 
    } 
    myIntegers.remove(myIntegersIt.previous()); 
} 

Есть ли альтернативное решение без использования предыдущих?

+1

Почему вы это делаете? Что случилось с 'Iterator.remove'? –

+0

Что должна делать ваша программа? Так как именно ваш код может легко выдать исключение –

ответ

0

myIntegers список можно просмотреть с усовершенствован для ... не итератора не нужен

for (Integer integer : myIntegers) { 
     if(...some code...){ 
      selectedValues.add(myIntegersIt.next()); 
      } 
    } 
0

Поскольку вы собираетесь удалить все данные из списка в любом случае, если вы используете , это простая операция.

поток над массивом, отфильтровать желаемые значения с логическим условием и вернуть его в виде List

selectedValues = myIntegers.stream().filter(x -> /*sometest*/).collect(Collectors.toList()); 
myIntegers.clear(); 

Использование List#removeIf(Predicate) также хороший способ сделать это.

myIntegers.removeIf(x -> //testToRemove); 
selectedValues = new LinkedList<>(myIntegers); 
myIntegers.clear(); 

 Смежные вопросы

  • Нет связанных вопросов^_^