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)
我想您需要获取 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)
| 归档时间: |
|
| 查看次数: |
34440 次 |
| 最近记录: |