我开发了以下程序,根据键对HashMap
进行排序,如下所示:
Map<String, String> countryCapitalMap = new HashMap<>();
countryCapitalMap.put("guyana", "georgetown");
countryCapitalMap.put("nepal", "kathmandu");
countryCapitalMap.put("australia", "canberra");
countryCapitalMap.put("india", "newdelhi");
countryCapitalMap.put("japan", "tokyo");
System.out.println("Original Map : \n" + countryCapitalMap);
Map<String, String> sortedMap = new LinkedHashMap<>();
Stream<Map.Entry<String, String>> stream = countryCapitalMap.entrySet().stream();
stream.sorted(Map.Entry.comparingByKey()).forEach(System.out::print);
现在该程序运行正常,其输出为:
Original Map:
{guyana=georgetown, japan=tokyo, nepal=kathmandu, australia=canberra, india=newdelhi}
australia=canberraguyana=georgetownindia=newdelhijapan=tokyonepal=kathmandu
如原始地图的情况所示,它以逗号分隔,因此我希望基于键排序的结果地图也以逗号分隔。请告知如何实现这一目标。
寻找仅使用方法参考的解决方案。
答案 0 :(得分:3)
forEach(x -> System.out.println(x + ", "));
或
String result = stream.sorted(Map.Entry.comparingByKey())
.collect(Collectors.joining(","));
答案 1 :(得分:1)
原因是您只输出条目的文本。因此,您只能使用Entry#toString
打印key=value
。地图本身用逗号连接所有这些入口文本。
您可以自行构建String
来解决此问题,例如使用StringBuilder
,StringJoiner
,String#join
或Collectors#joining
:
String result = stream
.sorted(Map.Entry.comparingByKey()) // Sorted
.map(Map.Entry::toString); // Entry -> String
.collect(Collectors.joining(", ")); // Collect by joining
// Print the result
System.out.println(result);
使用StringJoiner
的另一种解决方案:
StringJoiner sj = new StringJoiner(", ");
stream.sorted(Map.Entry.comparingByKey()) // Sorted
.map(Map.Entry::toString); // Entry -> String
.forEach(sj::add); // Add to joiner
// Print the result
String result = sj.toString();
System.out.println(result);
以下是所述课程的文件: