2017-10-17 21 views
-1

我在下面的程序開發了這種其排序鍵的基礎上,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-工作))。如果不是,那麼請說明還沒有答案,這是StackOverflow的重要組成部分,非常感謝。 – Zabuza

回答

3
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

1

的原因是,你只輸出輸入的文本。所以你只能用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); 

這裏是說類的單證: