簡體   English   中英

在Java中將Stream轉換為String

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM