尝试在 Java 中查找 Arraylist 中某个对象的所有匹配项更新
我在Java中有一个ArrayList,我需要找到其中特定对象的所有实例。方法ArrayList.indexOf(Object)只找到一个实例,所以似乎我需要其他东西。
我在Java中有一个ArrayList,我需要找到其中特定对象的所有实例。方法ArrayList.indexOf(Object)只找到一个实例,所以似乎我需要其他东西。
我不认为你需要太花哨。以下操作应该可以正常工作:
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;
}
我想你需要获取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;
}
它使用该方法搜索对象,并将当前数组索引保存到包含索引的列表中。您在问题中提到了这个问题,它使用该方法来测试相等性,如Java文档中所述:equals
indexOf
equals
搜索给定参数的第一个匹配项,使用该方法测试相等性。
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();
}