2017-07-10 24 views
-2

次の問題があります。私はメソッドを使ってリストを取得し、そのリスト内の値を見つけて別のものに置き換えたいと思う。Java、リスト内の値を置き換えます。

void replaceAll(ArrayList<Integer> arr, Integer toFind, Integer replacement) { 
    int indexOfArray = arr.indexOf(toFind); 
    if(arr.contains(toFind)) { 
     for(int x = 0; x < arr.size(); x++) { 
     if (arr.contains(toFind)) { 
      arr.remove(toFind); 
      arr.add(indexOfArray, replacement); 
     } 
     } 
    } 
} 

これは私が自分のために取り組んだ解決策であり、最も効果的です。しかし、私はそれがforループの使用なしでもっときれいに行うことができると思います。誰かが私にどのように教えてくれましたか?

+3

このコードが正常に機能する場合は、質問はスタックオーバーフローに関するトピックですが、姉妹サイト[コードレビュー](https://codereview.stackexchange.com/)には良いかもしれません。 –

+0

タブレットでテストすることはできませんが、UnaryOperatorの3項演算子で 'List#replaceAll'を実行するとどうなりますか? –

答えて

2

まさにこの操作を行うための方法で構築あり:

Collections.replaceAll(list, foo, bar); 
1

あなたはListIteratorでそれをしたい場合:ArrayListについては

ListIterator<Integer> it = list.listIterator(); 
while (it.hasNext()) { 
    if (it.next().equals(toFind)) { 
    it.set(replacement); 
    } 
} 

、これは得るために少し異なっているが、 /インデックスで要素を設定する。一般的には、非限定的な例として、より効率的である。あなたがLinkedListにそれを適用したい場合。

2

あなたは、ラムダのすべての電源を使用してJava 8を単にん使用している場合:

void 
replaceAll (ArrayList<Integer> list, Integer i1, Integer i2) 
{ 
    list.replaceAll ((x) => (x.equals (i1) ? i2 : x)); 
} 

あなたはまた、約java.util.stream.Stream

0

私はのインデックスを取得するために、2つのList方法indexOfを使用するを読みたいかもしれません置き換える要素とset古い要素を新しい要素に置き換える:

ArrayList<String> list = new ArrayList<String>(); 
     String newString = null, oldString = null; 
     list.set(list.indexOf(oldString), newString); 
関連する問題