Попытка найти все вхождения объекта в Arraylist, в java
У меня есть ArrayList в Java, и мне нужно найти все вхождения определенного объекта в нем. Метод ArrayList.indexOf (Object) просто находит одно вхождение, поэтому кажется, что мне нужно что-то еще.
5 ответов
Я не думаю, что вам нужно быть слишком фантазии об этом. Следующее должно работать:
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;
}
Я полагаю, вам нужно получить все индексы 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
метод.
повторите все элементы, не прерывайте цикл
каждый элемент ArrayList
сравните с вашим object
( arrayList.get(i).equals(yourObject)
)
если совпадение, чем индекс (i) должен храниться в отдельном ArrayList ( arraListMatchingIndexes).
иногда таким образом я делаю "удалить все", когда мне тоже нужна позиций.
надеюсь, это поможет!
Do
for (int i=0; i<arrList.size(); i++){
if (arrList.get(i).equals(obj)){
// It's an occurance, add to another list
}
}
надеюсь, что это помогает.
Это похоже на это ответ, просто использует 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]