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