我有这样的hashmap:
{apple, 20}, {nanas,18}, {anggur, 12},...........
我的hashmap已经按值降序排序。我想从第一个元素hashmap中获取10个元素。
任何人都可以帮助我吗?
答案 0 :(得分:2)
如果你使用java 8,我会选择:
List<MyKeyType> keys = map.entrySet().stream()
.map(Map.Entry::getKey)
.sorted()
.limit(10)
.collect(Collectors.toList());
工作原理:
sorted()方法采用可选的Comparator参数,如果需要,您可以在其中提供自定义排序逻辑。
答案 1 :(得分:0)
您需要使用 LinkedHashMap 以保留元素的顺序(即插入顺序),您可以参考以下代码进行检索加载的地图对象中的前10个元素:
Map<String, Integer> map = new LinkedHashMap<>();
//Load your values here
Set<String> keys = map.keySet();
String[] keysArray = keys.toArray(new String[keys.size()]);
for(int i=0; i<keysArray.length && i<10;i++) {
System.out.println(map.get(keysArray[i]));
}
答案 2 :(得分:0)
将地图的entrySet()
取出到列表中,按getValue()
对其进行排序,并获取最有价值的10个条目。
答案 3 :(得分:0)
由于您的地图已经排序,因此我们可以获取前10个键值作为新地图,如下所示:
Map<String, Integer> res = map.entrySet().stream()
.limit(10)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
如果您的地图未排序,我们可以使用:
Map<String, Integer> res = map.entrySet().stream()
.sorted((o1, o2) -> o2.getValue() - o1.getValue())
.limit(10)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));