所得地图到逗号的在Java基础

问题描述:

我在下面的程序开发了这种其排序键的基础上,HashMap上,如下所示进行分离:所得地图到逗号的在Java基础

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 

如在原始地图,这是逗号分隔的情况下示出,所以我想是要也逗号分隔的键的基础上排序所得到的地图。请告知如何实现这一点。

寻找只有方法参考的解决方案。

+1

你为什么要声明一个变量'sortedMap',并用新的'LinkedHashMap的初始化',当你从不使用它? – Holger

+0

@ user1493927如果用户回答你的问题,也请接受他的回答([接受答案:它是如何工作的?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-工作))。如果不是,那么请说明还没有答案,这是*的重要组成部分,非常感谢。 – Zabuza

forEach(x -> System.out.println(x + ", ")); 

String result = stream.sorted(Map.Entry.comparingByKey()) 
     .collect(Collectors.joining(",")); 
+1

紧凑,但有缺点,最后一个元素也有一个尾随','(第一个解决方案)。 – Zabuza

+0

但是,您可以使用'result = result.substring(0,result.length() - 1);'移除它。 – Zabuza

的原因是,你只输出输入的文本。所以你只能用Entry#toString打印key=value。地图本身用逗号连接所有这些输入文本。使用StringJoiner

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); 

另一种解决方案:

您可以通过建立自己的String,例如通过使用StringBuilderStringJoinerString#joinCollectors#joining解决这个

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); 

这里是说类的单证: