试图在java中查找Arraylist中出现的所有对象

mis*_*srg 14 java arraylist indexof

我在Java中有一个ArrayList,我需要在其中查找所有出现的特定对象.方法ArrayList.indexOf(Object)只找到一个匹配项,所以我似乎需要其他东西.

And*_*sen 17

我认为你不需要过于花哨.以下应该工作正常:

static <T> List<Integer> indexOfAll(T obj, List<T> list) {
    final List<Integer> indexList = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        if (obj.equals(list.get(i))) {
            indexList.add(i);
        }
    }
    return indexList;
}
Run Code Online (Sandbox Code Playgroud)

  • + 1,就像我的建议,但这已准备好复制粘贴:) (2认同)

MC *_*ror 6

我想您需要获取 ArrayList 的所有索引,其中该插槽上的对象与给定对象相同。

以下方法可能会执行您希望它执行的操作:

public static <T> int[] indexOfMultiple(List<T> list, T object) {
    List<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;
}
Run Code Online (Sandbox Code Playgroud)

它使用equals方法搜索对象,并将当前数组索引保存到带有索引的列表中。您指的indexOf是您的问题,它使用该equals方法来测试相等性,如 Java 文档中所述:

搜索给定参数的第一次出现,使用该equals方法测试相等性。


更新

使用 Java 8 流会变得更容易:

public static <T> int[] indexOfMultiple(List<T> list, T object) {
    return IntStream.range(0, list.size())
        .filter(i -> Objects.equals(object, list.get(i)))
        .toArray();
}
Run Code Online (Sandbox Code Playgroud)