在类型数据结构中替换阵列列表中的值



这可能是一个非常简单的问题,但我仍然会问。

我的arraylist:

ArrayList<FileNameData> fileData;

filenamedata类:

public FileNameData(TCComponentItemRevision rev, TCComponentDataset selectedDataset, String markUp, String fileName)

设置方法

public void setFileName(String fName) {
   fileName = fName;
}

我试图将用户输入文件名输入并替换数组中的文件名。

我创建了以下方法。

public void setFileName(int index, String fName) {
    fileData.set(index, setFileName(fName));
}

我知道要获取文件名,这很简单

String fName = fileData.get(index).getFileName();

我知道设置方法需要索引和新值,但是我不确定如何进入集合内的setFilename方法?

如果我让您正确,则要修改存储在位置index的对象:

public void setFileName(int index, String fName) {
    fileData.get(index).setFileName(fName);
}

或还有更多行:

public void setFileName(int index, String fName) {
    // get the fileNameData stored at position index
    FileNameData fileNameData = fileData.get(index);
    // set the new filename
    fileNameData.setFileName(fName);
}

如果要从arraylist获取特定文件并更改文件的名称,则需要从列表中获取正确的元素。

如果您知道旧文件的索引,则非常简单:

file = list.get(index);
file.setName(newName);

您可以使用ArrayListindexOf方法。为此,必须正确实现FileData对象的equalshashcode。假设文件的名称唯一地标识一个文件:

在Fifata类中

public boolean equals(Object other)
{
    return other instanceof FileData 
           && this.getFileName().equals(((FileData)other)getName());
}
public int hashCode()
{
    return this.getFileName().hashCode();
}

然后,您可以找到具有给定名称的文件的索引并进行更新:

FileData file = new FileData();
file.setName(oldName);
int index = list.indexOf(file);
file = list.get(index);
file.setName(newName);

如果我正确理解您,您有两个类似的类:

class SomeClass {
    ArrayList<FileNameData> fileData;
    public SomeClass(){
        fileData = new ArrayList<FileNameData>();   
    }
}

class FileNameData {
    String fileName;
    public FileNameData(TCComponentItemRevision rev, TCComponentDataset selectedDataset, String markUp, String fileName){ ... }
    public void setFileName(String fName) { 
        fileName = fName; 
    }
    public String getFileName() { 
        return fileName;
    }
}

因此,您需要找到一种方法来获取当前文件名的索引。

拥有索引后,您只需进行以下操作(应该在SomeClass中完成,以便班级看起来像:

class SomeClass {
    ArrayList<FileNameData> fileData;
    public SomeClass(){
        fileData = new ArrayList<FileNameData>();   
    }
    public void replaceFileNameAtIndex(int index, String fileName){
           fileData.get(index).setFileName(fileName);
    }
}

查找索引的一种方法可能是:

public int findIndexOfFilleName(String fileName){
     for (FileNameData file : fileData)
        if (file.getFileName().equals(fileName))
            return fileData.indexOf(file);
    return -1; //or some other value indicating not found
}

最新更新