java - Android Search ArrayList of objects for only a parameter,返回对象索引

标签 java android arraylist equals indexof

我遇到了一个大问题,现在我有一个名为 FileRelationship 的类,并且有两个构造函数。类如下所示。我还覆盖了此类中的 equals 方法。

public class FileRelationship {
String fileName;
String firstLink;
String secondLink;
String thirdLink;

public  FileRelationship(String fileName) {
    this.fileName = fileName;
}

public  FileRelationship(String fileName, String firstLink, String secondLink, String thirdLink) {
    this.fileName = fileName;
    this.firstLink = firstLink;
    this.secondLink = secondLink;
    this.thirdLink = thirdLink;
}

public boolean equals(Object o) {
    if(o == null) {
        return false;
    }

    if(this == o) {
        return true;
    }

    if(o instanceof FileRelationship) {
        return this.fileName.equals(((FileRelationship)o).fileName);
    }

    return false;
}

现在我有一个 FileRelationships 的数组列表,我希望能够搜索这个列表(这些都使用带有 4 个字符串的构造函数(fileName、firstLink、secondLink、thirdLink))现在我在另一个类中有一个方法应该搜索此 arrayList 并找到具有匹配文件名的索引。当我调用此方法时,我只将文件名传递给构造函数,仅此而已。 (这是我唯一能做到的,我不会知道其他字符串)。

这就是我设置 FileRelationships 的 ArrayList 的方式。

        fileRelationships = new ArrayList<FileRelationship>();

    String MasterLine;

    InputStream inputStream = this.getResources().openRawResource(R.raw.masterfile);

    InputStreamReader inputreader = new InputStreamReader(inputStream);
    BufferedReader buffreader = new BufferedReader(inputreader);

    // Creates the arrayList of all the relationships for later use of retreival.
    try {
        while (( MasterLine = buffreader.readLine()) != null) {
            MasterLineArray = MasterLine.split(",");
            String filename = MasterLineArray[0];
            String choice1 = MasterLineArray[1];
            String choice2 = MasterLineArray[2];
            String choice3 = MasterLineArray[3];
            FileRelationship fr = new FileRelationship(filename, choice1, choice2, choice3);

            fileRelationships.add(fr);
        }
    } catch (IOException e) {

    } finally {
        closeQuietly(buffreader);
}

这是我找到关系然后将其设置为我需要的变量的方法。我希望能够找到列表的索引并将其应用于变量。

        public void findRelationship(String nextFileName) {
        int pageIndex = fileRelationships.indexOf((new FileRelationship(nextFileName)));
        selectedRelationship = fileRelationships.get(pageIndex);
        currentPage = pageIndex;
    }

编辑:对不起,我忘了说出了什么问题。不,这是行不通的。 pageIndex 返回 -1(换句话说,它没有找到任何东西)。我不知道还能做什么,也许可以使用 HashCode,但老实说,我什至查阅了有关它的资料,但我也不知道如何使用它。

在这方面我真的非常需要帮助,因为这是一个即将到期的学校项目。我已经完成了大部分项目,因为一旦我完成了这部分,我就差不多完成了。谢谢。

最佳答案

像这样搜索

public void findRelationship(String nextFileName) {

for(FileRelationship file:fileRelationships)
{
    if(file.firsFileName.equals(nextFileName))
  {
     currentPage=fileRelationships.indexOf(file);
   }
}

}

当列表不包含该对象时,列表返回 -1。在您的情况下,您通过创建新对象来使用 indexOf() obj

 int pageIndex = fileRelationships.indexOf((new FileRelationship(nextFileName)));

这不是正确的方法。因为您正在创建新对象而列表不包含新对象

并且还为 FileRelationship 类中的每个字段制作 getter setter 方法,直接访问每个字段不是好的做法

关于java - Android Search ArrayList of objects for only a parameter,返回对象索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43797923/

相关文章:

java - 如何在java中将字符串中每个单词的第一个和最后一个字母大写

Java JLayeredPane 覆盖光标

android - 我收到此错误 "your cpu doesn' t 支持 vt-x 或 svm,AMD 6300 处理器中的 android studio 2.1.1”

java - org.springframework.orm.hibernate3.HibernateSystemException : Unknown entity: java. util.ArrayList

java - Dagger 不会为 Android 生成 Dagger 类

java - 退出应用程序时出现闪屏 Activity

android - 为什么下载管理器需要 `WRITE_EXTERNAL_STORAGE` maxSdkVersion > 18

android - Logcat 说 "invalid column data1"

java - 添加一列到 `2D ArrayList`

java - 字符串数组和列表比较