You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据ID属性值获取ArrayList中Book对象的索引?

嘿,这个需求很常见嘛!我给你整理几种靠谱的实现方式,你可以根据自己的Java版本来选:

方法1:传统for循环(全Java版本兼容)

这是最基础也最稳妥的路子,不管你用的是Java 5还是更高版本都能跑通。核心思路就是逐个遍历ArrayList里的Book对象,对比它们的ID,找到匹配的就返回当前索引。

假设你的Book类有getId()方法来获取ID值,代码示例如下:

public int getBookIndexById(ArrayList<Book> bookList, int targetId) {
    for (int i = 0; i < bookList.size(); i++) {
        Book currentBook = bookList.get(i);
        // 划重点:如果ID是字符串类型,一定要用equals()比较,别用==!
        if (currentBook.getId() == targetId) {
            return i;
        }
    }
    // 没找到匹配的ID就返回-1,代表该对象不存在于列表中
    return -1;
}
方法2:Java 8+ 流API(更简洁优雅)

如果你用的是Java 8及以上版本,用流来处理会更清爽,代码可读性也更高:

import java.util.stream.IntStream;

public int getBookIndexById(ArrayList<Book> bookList, int targetId) {
    return IntStream.range(0, bookList.size())
            .filter(index -> bookList.get(index).getId() == targetId)
            .findFirst()
            // 没找到的话返回-1,也可以用orElseThrow()抛出异常,看你业务需求
            .orElse(-1);
}

这个方法的逻辑是生成从0到列表长度的索引流,过滤出ID匹配的索引,然后取第一个匹配项;如果没有匹配的,就返回-1。

方法3:用List.indexOf()?先踩坑预警!

你可能会想到直接用bookList.indexOf(targetBook),但这里有个前提:你的Book类必须正确重写了equals()方法,而且这个方法是根据ID来判断两个Book对象是否相等的。

如果你的Book类还没重写equals()和hashCode(),得先补上:

import java.util.Objects;

public class Book {
    private int id;
    // 其他属性、构造方法、getter/setter
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return id == book.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    public int getId() {
        return id;
    }
}

之后就可以这样用:

// 创建一个仅ID匹配的Book对象(因为equals只对比ID)
Book tempBook = new Book();
tempBook.setId(targetId);
int index = bookList.indexOf(tempBook);

不过这种方法不如前两种直接,毕竟还要额外创建一个临时对象,除非你本来就持有这样的对象,否则不太推荐。

额外提醒
  • 如果列表里存在多个ID相同的Book对象,上面的方法都会返回第一个匹配项的索引;如果需要找到所有匹配的索引,把返回类型改成List<Integer>,收集所有符合条件的索引即可。
  • 记得处理返回-1的情况,避免后续操作因为索引越界抛出异常。

内容的提问来源于stack exchange,提问作者M.khanousse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:08:08