i have hashmap like this:
{apple, 20}, {nanas,18}, {anggur, 12},...........
我的HashMap已经按值降序排序了。 我想从第一个元素的HashMap中获取10个元素。 有人能帮忙吗?
i have hashmap like this:
{apple, 20}, {nanas,18}, {anggur, 12},...........
List<MyKeyType> keys = map.entrySet().stream()
.map(Map.Entry::getKey)
.sorted()
.limit(10)
.collect(Collectors.toList());
它的工作原理:
sorted()方法有一个可选的Comparator参数,您可以在其中提供自定义排序逻辑(如果需要)。
既然你的地图已经排序,我们可以像这样获取前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));
entrySet()
取出到列表中,按getValue()
排序并取出最大值的10个条目。您需要使用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]));
}
LinkedHashMap
保持插入顺序或可选访问顺序 - 不按值的降序排列。 - Ole V.V.
HashMap
无法排序,因为它没有顺序。因此不存在“第一个”10
或“最后一个”10
。这个问题毫无意义。 - Boris the Spider