Доступ к каждому элементу в ArrayDeque - PullRequest
0 голосов
/ 28 июня 2018

Можно ли получить доступ к элементу, хранящемуся в ArrayDeque, в каждой итерации? Поскольку у ArrayDeque нет метода get, мне сложно получить доступ к каждому элементу. В следующем примере у меня есть целое число arraydeque, и я пытаюсь извлечь элементы с помощью итератора, и я хочу проверить, равно ли значение 2. Если это так, я хочу удалить его из ArrayDeque, но это дает мне ошибку.

import java.lang.*;
import java.util.*;

public class ArrayDequeTest {

public static void main(String[] args) 
{   
    ArrayDeque<Integer> a = new ArrayDeque<Integer>();
    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);
    a.add(2);
    System.out.println("Elements added !!");

    Iterator i = a.iterator();
    System.out.println("\nRemoving the element whose value is 2");
    while(i.hasNext())
    {
        if(i==2) // please suggest as to how i can compare
        {
            i.remove();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Если вы используете Java 8, вы можете использовать лямбда-выражения и выполнить эту операцию удаления всего за одну строку.

 a.removeIf(e -> e == 2);
0 голосов
/ 28 июня 2018

Вы пропускаете вызов next() для продвижения итератора и получения текущего значения:

Iterator<Integer> i = a.iterator();
while (i.hasNext())
{
    if (i.next() == 2) // Here!
    {
        i.remove();
    }
}

Обратите внимание, что ArrayDeque - это Collection, так что вы можете использовать гораздо более элегантный removeIf:

a.removeIf(v -> v == 2);
...