から上位 10 個の値を取得する方法を見つけようとしていHashMap
ます。私は最初に を使用して、値で並べ替えてから最初の 10 個の値を取得しようとしていましたが、キーTreeMap
で並べ替えるため、それはオプションではないようです。TreeMap
どのキーが最も高い値を持っているかを知りたいのですK, V
が、マップのString, Integer
.
おそらくComparable
、ハッシュマップに格納されている値オブジェクトへのインターフェイスを実装する必要があります。次に、すべての値の配列リストを作成できます。
List<YourValueType> l = new ArrayList<YourValueType>(hashmap.values());
Collection.sort(l);
l = l.subList(0,10);
よろしく
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Testing {
public static void main(String[] args) {
HashMap<String,Double> map = new HashMap<String,Double>();
ValueComparator bvc = new ValueComparator(map);
TreeMap<String,Double> sorted_map = new TreeMap<String,Double>(bvc);
map.put("A",99.5);
map.put("B",67.4);
map.put("C",67.4);
map.put("D",67.3);
System.out.println("unsorted map: "+map);
sorted_map.putAll(map);
System.out.println("results: "+sorted_map);
}
}
class ValueComparator implements Comparator<String> {
Map<String, Double> base;
public ValueComparator(Map<String, Double> base) {
this.base = base;
}
// Note: this comparator imposes orderings that are inconsistent with equals.
public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return -1;
} else {
return 1;
} // returning 0 would merge keys
}
}
マップの上位 10 個の値を取得しようとしている場合 (値が数値であるか、少なくとも Comparable を実装していると仮定)、これを試してください。
List list = new ArrayList(hashMap.values());
Collections.sort(list);
for(int i=0; i<10; i++) {
// Deal with your value
}
Let's assume you have a Map, but this example can work for any type of
Map<String, String> m = yourMethodToGetYourMap();
List<String> c = new ArrayList<String>(m.values());
Collections.sort(c);
for(int i=0 ; i< 10; ++i) {
System.out.println(i + " rank is " + c.get(i));
}