2

これを1つのforループにどのように記述しますか

for (File file:files)
  {
    if (file.getName().endsWith(".dat"))   {
       Species x = reader.readSpecies(file);
       allSpecies.add(x);
       allGenes.addAll(x.getGenome());
    }
} 
for (File file:files){
     if (file.getName().endsWith(".dat")) {
       Species x = reader.readSpecies(file);
       x.setIndices(allGenes);
     }
}

1 つのループを使用して、次のセグメントよりも 1 つのセグメントの for ループを実行したい。これは可能ですか?そうでない場合、私が書いているコードは DRY に違反していますか?

さて、これまでに回答した人は、私の質問をまったく理解していません。コードが最初のループ全体を通過するようにします。そして、2 番目のループ全体。インデックスを設定する方法は、ループ内のすべてのファイルに対して allGenes.addAll が完了するまで機能しません。

4

3 に答える 3

2

そのはず

for (File file:files){
        if (file.getName().endsWith(".dat")){
            Species x = reader.readSpecies(file);                
            allSpecies.add(x);
            allGenes.addAll(x.getGenome());
            x.setIndices(allGenes);
        }
}
于 2013-03-25T05:43:50.383 に答える
0
if (file.getName().endsWith(".dat")){
    Species x = reader.readSpecies(file);
    x.setIndices(allGenes); // Take out this line from for loop 2 and put it inside for loop 1
    allSpecies.add(x);
    allGenes.addAll(x.getGenome());
} 

if両方のループの条件がfor同じであるため、上記のステートメントを 2 番目forから 1番目に移動するだけで、両方をマージできますfor

于 2013-03-25T05:43:58.040 に答える
0

x.setIndices(allGenes)2番目のループから最初のループに追加するだけですallGenes.addAll(x.getGenome())

于 2013-03-25T05:57:14.500 に答える