Попытка найти все вхождения объекта в Arraylist, в java

У меня есть ArrayList в Java, и мне нужно найти все вхождения определенного объекта в нем. Метод ArrayList.indexOf(Object) просто находит одно вхождение, поэтому кажется, что мне нужно что-то еще.

Ответ 1

Я не думаю, что вам нужно слишком задумываться об этом. Следующее должно работать нормально:

static ArrayList<Integer> indexOfAll(Object obj, ArrayList list){
    ArrayList<Integer> indexList = new ArrayList<Integer>();
    for (int i = 0; i < list.size(); i++)
        if(obj.equals(list.get(i)))
            indexList.add(i);
    return indexList;
}

Ответ 2

Я предполагаю, что вам нужно получить все индексы ArrayList, где объект в этом слоте совпадает с данным объектом.

Следующий способ может сделать то, что вы хотите:

public static <T> int[] indexOfMultiple(ArrayList<T> list, T object) {
    ArrayList<Integer> indices = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).equals(object)) {
            indices.add(i);
        }
    }
    // ArrayList<Integer> to int[] conversion
    int[] result = new int[indices.size()];
    for (int i = 0; i < indices.size(); i++) {
        result[i] = indices.get(i);
    }
    return result;
}

Он ищет объект с помощью метода equals и сохраняет текущий индекс массива в список с индексами. Вы ссылаетесь на indexOf в своем вопросе, который использует метод equals для проверки равенства, как сказано в документации Java:

Ищет первое появление данного аргумента, проверяя равенство с помощью метода equals.

Ответ 3

итерация по всем элементам, не прерывайте цикл

каждый элемент ArrayList сравним с вашим object (arrayList.get(i).equals(yourObject))

если совпадение, чем индекс (i), необходимо сохранить в отдельный ArrayList (arraListMatchingIndexes).

Иногда таким образом я делаю "удалять все", когда мне тоже нужны позиции.

Надеюсь, это поможет!

Ответ 4

Do

for (int i=0; i<arrList.size(); i++){
    if (arrList.get(i).equals(obj)){
        // It an occurance, add to another list
    }
}

Надеюсь, что это поможет.

Ответ 5

Это похоже на этот ответ, просто использует stream API.

List<String> words = Arrays.asList("lorem","ipsum","lorem","amet","lorem");
String str = "lorem";
List<Integer> allIndexes =
        IntStream.range(0, words.size()).boxed()
                .filter(i -> words.get(i).equals(str))
                .collect(Collectors.toList());
System.out.println(allIndexes); // [0,2,4]