如何解决如何重构此 Java 代码以创建键值对的字符串列表,而不是将它们打印出来?
所以我在网上看到了一些代码,我在我的程序中实现了一些代码,根据整数的值对 hashmap
如果有人能指出我正确的方向,这会有所帮助,我什至不知道要谷歌什么才能找到如何做到这一点,谢谢。
public List<String> getMaxList(int n,HashMap<String,Integer> itemCount){
List<Map.Entry<String,Integer>> maxList = new ArrayList<>();
Object[] a = itemCount.entrySet().toArray();
int n_iterator = n-1;
Arrays.sort(a,new Comparator() {
public int compare(Object o1,Object o2) {
return ((Map.Entry<String,Integer>) o2).getValue()
.compareTo(((Map.Entry<String,Integer>) o1).getValue());
}
});
for (Object e : a) {
System.out.println(((Map.Entry<String,Integer>) e).getKey() + " : "
+ ((Map.Entry<String,Integer>) e).getValue());
if (n_iterator <= 0){
break;
} else {
n_iterator--;
}
}
return null;
}
}
解决方法
如何重构此 Java 代码以创建键值对的字符串列表,而不是将它们打印出来? 像这样试试。
创建一些数据
Map<String,Integer> map =
Map.of("A",10,"B",3,"C",8,"D",2);
现在流式传输地图的条目集。根据值排序并将条目转换为 String:int
字符串并放入列表中。
List<String> list = map.entrySet().stream()
.sorted(Entry.comparingByValue()))
.map(e -> e.getKey() + ":" + e.getValue())
.collect(Collectors.toList());
System.out.println(list);
印刷品
[D:2,B:3,C:8,A:10]
要降序排序,将上面的sort
方法改为
.sorted(Entry.<String,Integer>comparingByValue().reversed())
请注意,Entry
比较器必须与类型为 witnessed
,因为编译器无法识别它们以正确应用 reversed()
方法。以上只是颠倒了 Integers
升序的自然排序顺序。
最后,并非所有对象都提供返回比较器的方法,因此以下方法也适用。
.sorted(Comparator.comparing(Entry::getValue,Comparator.reverseOrder()))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。