次の値のリストがあるとします。
List<String> values = Lists.asList("a", "a", "b", "c");
ここで、すべての値にインデックスを追加して、リストとしてこれになるようにします。
a1 a2 b1 c1 // imagine numbers as subscript
FluentIterable
そのために aとそのメソッドを使用したいtransform
ので、次のようにします。
from(values).transform(addIndexFunction);
それに関する問題はaddIndexFunction
、インデックスがすでに増加した頻度を知る必要があることです-a2
これにインデックスを追加するときa
に、関数は既にa1
.
それで、そのようなことをするためのある種のベストプラクティスはありますか? 私の現在の考えは、各文字をキーとしてマップを作成することです。
Map<String,Integer> counters = new HashMap<>();
// the following should be generated automatically, but for the sake of this example it's done manually...
counters.put("a", 0);
counters.put("b", 0);
counters.put("c", 0);
次に、変換呼び出しを変更します。
from(values).transform(addIndexFunction(counters));
Map はオブジェクトであり、参照によって渡されるため、変換間でカウンターの状態を共有できるようになりましたね。フィードバック、より良いアイデアはありますか? Guava には、そのようなことのための組み込みメカニズムがありますか?
ヒントをありがとう!