Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中基于逗号分隔的结果映射_Java_Java 8 - Fatal编程技术网

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

java中基于逗号分隔的结果映射,java,java-8,Java,Java 8,我开发了以下程序,该程序根据如下所示的键对HashMap进行排序: Map<String, String> countryCapitalMap = new HashMap<>(); countryCapitalMap.put("guyana", "georgetown"); countryCapitalMap.put("nepal", "kathmandu"); countryCapitalMap.put("australia", "canberra"); country

我开发了以下程序,该程序根据如下所示的键对
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);
如原始映射的情况所示,它是逗号分隔的,因此我希望根据键排序的结果映射也是逗号分隔的。请告知如何实现这一目标

正在查找仅包含方法引用的解决方案

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


原因是您只输出条目的文本。因此,您只使用打印
key=value
Entry#toString
。映射本身用逗号连接所有这些输入文本

您可以通过自己构建
字符串来解决此问题,例如使用
StringBuilder
StringJoiner
String#join
收集器#join

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

以下是上述课程的文件:


紧凑,但缺点是最后一个元素也有一个尾随
(第一个解决方案)。但是,您可以使用
result=result.substring(0,result.length()-1)将其删除
。为什么您从未使用过变量
sortedMap
,却要声明变量
sortedMap
,并用新的
LinkedHashMap
对其进行初始化?@user1493927如果用户回答了您的问题,请接受他的回答()。如果没有,请说明还有什么问题没有回答,这是StackOverflow的关键部分,非常感谢。
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 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);