次のようなテキストファイルがあります。
code appearance
----------------
j4t8 1
fj89 3
pf6n 1
j4t8 5
そして、最も表示されるコードで並べ替えたいと思います。ご覧のとおり(そしてgroup byを実行したいので)コードが重複しているため、HashMapの使用が問題になります(キーの重複)。何か案は?
次のようなテキストファイルがあります。
code appearance
----------------
j4t8 1
fj89 3
pf6n 1
j4t8 5
そして、最も表示されるコードで並べ替えたいと思います。ご覧のとおり(そしてgroup byを実行したいので)コードが重複しているため、HashMapの使用が問題になります(キーの重複)。何か案は?
ペアオブジェクトのコレクションが必要です。各ペアは、コードと外観を保持します。次に、Comparatorを使用してコレクションを並べ替えます。Comparatorは、各Pairオブジェクトの外観のみを比較し、コードを無視します。
使用できます
HashMap map = new HashMap<String, List<Integer>>();
外観は、すべてのコードに関連付けられたリストに保存されます。次に、コードを指定すると、整数のリストを取得して反復処理するだけです。
これが最善の解決策かどうかはわかりませんが、次のようなリストのマップを作成できます。
Map<String, List<Integer>> map = new HahsMap<String, List<Integer>>();
if(map.contains.(key))
{
map.get(key).add(new_appearance_value);
}
else
{
List<Integer> app = new ArrayList<Integer>();
app.add(new_appearance_value);
map.put(key, app);
}
マップキーがコードであり、外観の値がリストに追加されます。
注:どのコードがより多くの外観を持っているかを判断するには、各コードのリストのサイズを確認するだけです。
Commons Collections MultiValueMapを使用して別のマップを装飾し、キーに複数の値を設定できるようにすることができます。