我遇到了一个大问题,现在我有一个名为 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/