ArrayList中对象的索引根据其属性值之一

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayList中对象的索引根据其属性值之一相关的知识,希望对你有一定的参考价值。

我有一个包含Book对象的ArrayList,如何根据其属性“ID”值获取特定对象的索引?

public static void main(String[] args) {
   ArrayList<Book> list = new ArrayList<>();
   list.add(new Book("foods", 1));
   list.add(new Book("dogs", 2));
   list.add(new Book("cats", 3));
   list.add(new Book("drinks", 4));
   list.add(new Book("sport", 5));

   int index =  
}

本书课:

public class Book {
    String name;
    int id;

    public Book(String name, int Id) {
        this.name=name;
        this.id=Id;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

}
答案

您可以使用IntStream生成索引,然后根据给定的条件使用filter操作,然后使用.findFirst()...检索索引,如下所示:

int index = IntStream.range(0, list.size())
                     .filter(i -> list.get(i).id == searchId)
                     .findFirst()
                     .orElse(-1);
另一答案

对于Java版本低于8的解决方案

作为Java 8工作解决方案的补充,对于那些使用8之前的Java版本的人来说,有一个解决方案:

int idThatYouWantToCheck = 12345; // here you can put any ID you're looking for
int indexInTheList = -1; // initialize with negative value, if after the for loop it becomes >=, matching ID was found

for (int i = 0; i < list.size(); i++) {
    if (list.get(i).getId == idThatYouWantToCheck) {
        indexInTheList = i;
        break;
    } 
}
另一答案

这正是您正在寻找的:

private static int findIndexById(List<Book> list, int id) {
    int index = -1;
    for(int i=0; i < list.size();i++){
        if(list.get(i).id == id){
            return i;
        }
    }
    return index;
}

并称之为:

int index = findIndexById(list,4);

即使您使用的是Java 8,也不建议您使用Java。 for循环比流更快。 Reference

以上是关于ArrayList中对象的索引根据其属性值之一的主要内容,如果未能解决你的问题,请参考以下文章

Collection与Map

Java集合ArrayList源代码详细解析

按对象属性之一的值对对象列表进行排序,其中只有一个值是感兴趣的

ArryayList 和linkedList的比较

ArrayList底层原理

资源“此处的 GUID 值”不存在或其查询的引用属性对象之一不存在