1

これはおそらく非常に単純な質問ですが、それでも質問します。

私の配列リスト:

ArrayList<FileNameData> fileData;

FileNameData クラス:

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

set メソッド

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();

set メソッドにはインデックスと新しい値が必要であることはわかっていますが、setFileName メソッドにセット内でアクセスする方法がわかりません。

4

3 に答える 3

2

私が正しければ、 position に格納されているオブジェクトを変更したいでしょう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);
}
于 2012-10-18T19:29:10.203 に答える
0

ArrayList から特定のファイルを取得してファイルの名前を変更しようとしている場合は、リストから正しい要素を取得する必要があります。

古いファイルのインデックスがわかっている場合、それはかなり単純です。

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

indexOfの方法が使えますArrayList。このためには、オブジェクトのequalsandを正しく実装する必要があります。ファイルの名前がファイルを一意に識別すると仮定します。hashcodeFileData

FileData クラスで

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);
于 2012-10-18T19:35:28.210 に答える
0

私があなたを正しく理解していれば、次のような 2 つのクラスがあります。

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;
    }
}

そのため、現在の 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);
    }
}

インデックスを見つける 1 つの方法は次のとおりです。

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
}
于 2012-10-18T19:36:58.977 に答える