Поиск индекса повторяющихся значений в ArrayList - PullRequest
6 голосов
/ 22 апреля 2011

У меня есть ArrayList, который содержит повторяющиеся значения в diff diff index.например, {"Indian","American","Chinese","Australian","Indian","Russian","Indian"} как вы можете видеть значение - "Indian" существует в индексе - 0, 4 & 6.

Мне нужно знать все эти индексы, где существует "Indian" исоздать arrayList этого.Вот мой код:

public void filter(){


    categoryArray = Arrays.asList(category);

    for(String k : category){
        //Log.v("filter", filterTerm);
        if(k.equals(filterTerm.toLowerCase()))
        {               
            int p = categoryArray.indexOf(k);                   
            Log.v("index of categArr", ""+p);
            String id = Integer.toString(p);
            indexes.add(id);


        }// end of if
    }// end of for

Здесь я получаю, сколько раз повторяется, получая размер индексов (ArrayList), но когда я проверяю значения.Это одно значение на весь индекс, поскольку в методе: indexOf() он всегда возвращает индекс первого значения, которое он находит в массиве.

Так что, если в индексе существует дубликат - 2, 5,7 Я получаю размер массива индекса как 3.Но значения {2,2,2,};

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Это ситуация, когда основанный на индексе цикл for является более подходящим, чем расширенный цикл for, который вы используете, поскольку вам нужно захватить индекс.

Вы можете основывать всю свою работу наисходный массив, а не преобразование его в список, и я подозреваю, что вы шли на совпадение без учета регистра.

public void filter(){
    for(int i=0; i<category.length; i++){
        if(category[i].equalsIgnoreCase(filterTerm))
        {               
            String id = Integer.toString(i);
            indexes.add(id);
        }
    }
}

Если у вас есть ArrayList, а не массив, конечно, подобный код будет работать, ноиспользуя list.get(i) вместо category[i].

2 голосов
/ 22 апреля 2011

Вам нужно знать, какой индекс в массиве вы находитесь в данный момент, а не первый индекс, в котором он находится. Чтобы отследить это, поставьте

int i = 0;

перед циклом, а на самом конце цикла поставить

i++;

Тогда переменная i сообщает вам, где вы нашли значение, поэтому вы можете добавить i в список индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...