在 Java 中将 Stream 转换为字符串
Posted
技术标签:
【中文标题】在 Java 中将 Stream 转换为字符串【英文标题】:Convert Stream to String in Java 【发布时间】:2019-11-15 01:26:58 【问题描述】:我想将 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();
【问题讨论】:
你能给我们一个示例地图,以及字符串输出应该是什么? 我认为您在这里混淆了 Java 的两种(名称混淆)不同类型的“流”。如果您只看Collectors.joining()
,您应该能够更简单地实现您的目标,而无需所有BufferedReader
的东西。
【参考方案1】:
您可以将条目收集到单个String
中,如下所示:
String sorted =
map.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.map(e-> e.getKey().toString() + "=" + e.getValue().toString())
.collect(Collectors.joining (","));
【讨论】:
【参考方案2】:这很容易做到,您可以使用 Steams API 来做到这一点。首先,您将映射中的每个条目映射到单个字符串 - 键和值的连接字符串。完成后,您可以简单地使用reduce()
方法或collect()
方法来完成。
使用 'reduce()' 方法的代码 sn-p 将如下所示:
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);
两种方法都提供相同的输出。
【讨论】:
【参考方案3】:考虑对@Eran 的代码稍作改动,因为HashMap.Entry.toString()
已经为您通过=
加入:
String sorted =
map.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.map(Objects::toString)
.collect(Collectors.joining(","));
【讨论】:
以上是关于在 Java 中将 Stream 转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
在Java 8中将整数数组转换为字符串数组的最简单方法[重复]