[英]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.