Map<String,String>
には「User1」、「43」などのエントリがあります。今私は最高値の「トップ3」を求めています。Map <String、String>から最大値を3つ取得
Map<String,Integer>
の方が簡単ですが、技術的な制限のためにマップを取得できるのは<String,String>
です。
<String,String>
マップを<String,Int>
に変換して並べ替える最も効率的な方法は何ですか?
Map<String,String>
には「User1」、「43」などのエントリがあります。今私は最高値の「トップ3」を求めています。Map <String、String>から最大値を3つ取得
Map<String,Integer>
の方が簡単ですが、技術的な制限のためにマップを取得できるのは<String,String>
です。
<String,String>
マップを<String,Int>
に変換して並べ替える最も効率的な方法は何ですか?
Map.values()を使用してMapの値を繰り返し、Integer(Integer.getInteger(String s)を使用)をそれぞれ変換し、表示されるトップ3を追跡できます。
または、上の3を追跡する代わりに、LinkedListを作成して各整数を正しい場所に挿入します(Integerを挿入する場所を見つけるまでLinkedListをたどります)。
いくつかの方法があります。
:
<String, String>
から使用できる<String, Integer>
に変換するには...を元のマップからそれらのキーと値から新しいマップを作成します。
Map<String, Integer> treemap = new HashMap<String, Integer>();
for (Entry<String, String> entry : entries) {
treemap.put(entry.getKey(), Integer.parseInt(entry.getValue()));
}
しかし、あなたは反復する必要があります再び地図。マップ全体を必要とせず、トップ3だけが必要な場合は、単純にエントリを反復し、上位3つを比較することができます。
また、トップ要素とデータ全体の両方が必要な場合は、キーと値を逆にして、Comparator
のTreeMap<Integer, String>
を使用することができます。
あなただけのリストに値を入れて、それを並べ替えることができます:
ArrayList<Integer> highest = new ArrayList<Integer>();
for (String value : map.values()) {
highest.add(Integer.parseInt(value));
}
Collections.sort(highest);
for(int i = highest.size() - 1; i >=0 && i > highest.size()-4; i--){
System.out.println(highest.get(i));
}
マップが非常に大きい場合、それを反復処理する方が良いとだけ全体のリストをソートすることなく、3つの最高値を選択するかもしれません。