次のようなリストがあります
List<Summary> summary;
Summary {
int key;
String value1;
String value2;
}
リストをループせずに、変数value1の文字列「String1」のすべての出現を置き換えるJava(またはその他のユーティリティライブラリ)の方法はありますか?
次のようなリストがあります
List<Summary> summary;
Summary {
int key;
String value1;
String value2;
}
リストをループせずに、変数value1の文字列「String1」のすべての出現を置き換えるJava(またはその他のユーティリティライブラリ)の方法はありますか?
リストのループは避けられないため、あなたまたはサードパーティのライブラリでループを実行する必要があります。それは本当に難しいですか:
for (Summary s : summary)
if (s.value1.equals("String1"))
s.value1 = "...";
? :)
おそらく、ループなしで使用できるライブラリを使用できますが、問題は、低レベルでコンパイラがループのようなものを使用して実行する必要があることです。直接的または間接的にループを使用すると思います。
このため、コードでループを使用しても問題はありません。
私の英語で申し訳ありませんが、すべて理解していただければ幸いです。
オブジェクト部分で検索するメソッドを追加できます。
public class ListOfString {
public static void main(String[] args) {
List<Model> models = new ArrayList<>();
for(int i = 0 ; i < 5; i++) {
Model model = new Model();
model.setStr("String"+i);
models.add(model);
}
Model temp = new Model();
temp.setStr("String1");
System.out.println(containsObjectPart(temp, models));
}
// This method just a prototype, you can modify as you like...
private static boolean containsObjectPart(Model obj, List<Model> models) {
for(Model model : models) {
if(model.getStr().equals(obj.getStr()))
return true;
}
return false;
}
}
class Model {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
値をキー、オブジェクトをTreeSet
値としてa を使用することで、リストの順序を失うことを犠牲にして、少しのループを回避できます。次に、バイナリ チョップ検索を実行して、一致するすべてのエントリを見つけることができます。ハッシュを使用するコレクションには、同様のトレードオフとメリットがあります。value1
Summary
そうしないと、他の人が言ったように、ループは避けられません。実行できる唯一の最適化は、エントリがリストに入るときにエントリをカウントすることです。これにより、エントリがすべて見つかったことがわかり、ループを停止できます。
ただし、時期尚早の最適化は諸悪の根源であることを忘れないでください。:)
いいえ、できません。しかし、などの多くの領域Loop
をinvetible
最適化できます。selecting loop
how do you find the string and replacing it