1

次のようなリストがあります

List<Summary> summary;

Summary {
    int key;
    String value1;
    String value2;
}

リストをループせずに、変数value1の文字列「String1」のすべての出現を置き換えるJava(またはその他のユーティリティライブラリ)の方法はありますか?

4

5 に答える 5

7

リストのループは避けられないため、あなたまたはサードパーティのライブラリでループを実行する必要があります。それは本当に難しいですか:

for (Summary s : summary)
    if (s.value1.equals("String1"))
        s.value1 = "...";

? :)

于 2012-06-07T07:54:19.870 に答える
3

おそらく、ループなしで使用できるライブラリを使用できますが、問題は、低レベルでコンパイラがループのようなものを使用して実行する必要があることです。直接的または間接的にループを使用すると思います。

このため、コードでループを使用しても問題はありません。

私の英語で申し訳ありませんが、すべて理解していただければ幸いです。

于 2012-06-07T08:00:36.370 に答える
1

オブジェクト部分で検索するメソッドを追加できます。

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;
    }
}
于 2012-06-07T08:43:42.117 に答える
0

値をキー、オブジェクトをTreeSet値としてa を使用することで、リストの順序を失うことを犠牲にして、少しのループを回避できます。次に、バイナリ チョップ検索を実行して、一致するすべてのエントリを見つけることができます。ハッシュを使用するコレクションには、同様のトレードオフとメリットがあります。value1Summary

そうしないと、他の人が言ったように、ループは避けられません。実行できる唯一の最適化は、エントリがリストに入るときにエントリをカウントすることです。これにより、エントリがすべて見つかったことがわかり、ループを停止できます。

ただし、時期尚早の最適化は諸悪の根源であることを忘れないでください。:)

于 2012-06-07T08:21:24.693 に答える
0

いいえ、できません。しかし、などの多くの領域Loopinvetible最適化できます。selecting loophow do you find the string and replacing it

于 2012-06-07T08:06:39.187 に答える