[英]Convert Stream to String in Java
我想將Map <>的Stream轉換為String,以將其附加到textArea。 我嘗試了一些方法,最后一個使用StringBuilder,但它們不起作用。
public <K, V extends Comparable<? super V>> String sortByAscendentValue(Map<K, V> map, int maxSize) {
StringBuilder sBuilder = new StringBuilder();
Stream<Map.Entry<K,V>> sorted =
map.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()));
BufferedReader br = new BufferedReader(new InputStreamReader((InputStream) sorted));
String read;
try {
while ((read=br.readLine()) != null) {
//System.out.println(read);
sBuilder.append(read);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sorted.limit(maxSize).forEach(System.out::println);
return sBuilder.toString();
}
您可以將條目收集到單個String
,如下所示:
String sorted =
map.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.map(e-> e.getKey().toString() + "=" + e.getValue().toString())
.collect(Collectors.joining (","));
這很容易做到,你可以使用Steams API來做到這一點。 首先,將映射中的每個條目映射到單個字符串 - 鍵和值的串聯字符串。 一旦你有了,你可以簡單地使用reduce()
方法或collect()
方法來做到這一點。
使用'reduce()'方法的代碼段看起來像這樣:
Map<String, String> map = new HashMap<>();
map.put("sam1", "sam1");
map.put("sam2", "sam2");
String concatString = map.entrySet()
.stream()
.map(element-> element.getKey().toString() + " : " + element.getValue().toString())
.reduce("", (str1,str2) -> str1 + " , " + str2).substring(3);
System.out.println(concatString);
這將為您提供以下輸出:
sam2 : sam2 , sam1 : sam1
您也可以使用collect()' method instead of
reduce()`方法。 它看起來像這樣:
String concatString = map.entrySet()
.stream()
.map(element-> element.getKey().toString() + " : " + element.getValue().toString())
.collect(Collectors.reducing("", (str1,str2) -> str1 + " , " + str2)).substring(3);
兩種方法都提供相同的輸出。
考慮到@Eran的代碼略有變化,關於HashMap.Entry.toString HashMap.Entry.toString()
已為您加入=
的事實:
String sorted =
map.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.map(Objects::toString)
.collect(Collectors.joining(","));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.