为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中将流转换为字符串

在 Java 中将流转换为字符串

慕斯709654 2023-03-09 10:59:07
我想将 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();}
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超5个赞

您可以按如下方式将条目收集到一个条目中String

  String sorted =
        map.entrySet().stream()
           .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
           .map(e-> e.getKey().toString() + "=" + e.getValue().toString())
           .collect(Collectors.joining (","));


查看完整回答
反对 回复 2023-03-09
?
慕斯王

TA贡献1864条经验 获得超2个赞

考虑对@Eran的代码进行细微更改,因为它已经为您HashMap.Entry.toString()加入了:=

String sorted =
    map.entrySet().stream()
        .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
        .map(Objects::toString)
        .collect(Collectors.joining(","));


查看完整回答
反对 回复 2023-03-09
?
慕后森

TA贡献1802条经验 获得超5个赞

这很容易做到,您可以使用 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 ofreduce()` 方法。它看起来像这样:


    String concatString = map.entrySet()

            .stream()

            .map(element-> element.getKey().toString() + " : " + element.getValue().toString())

            .collect(Collectors.reducing("", (str1,str2) -> str1 + " , " + str2)).substring(3);

两种方法都提供相同的输出。


查看完整回答
反对 回复 2023-03-09
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号