结果映射在java中基于逗号分隔

时间:2017-10-17 14:02:57

标签: java java-8

我开发了以下程序,根据键对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

如原始地图的情况所示,它以逗号分隔,因此我希望基于键排序的结果地图也以逗号分隔。请告知如何实现这一目标。

寻找仅使用方法参考的解决方案。

2 个答案:

答案 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来解决此问题,例如使用StringBuilderStringJoinerString#joinCollectors#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);

以下是所述课程的文件: