2016-07-01 19 views
4

HashMapのキーと値を ':'を含む文字列に接続してリストに変換したいと考えています。HashMapのキーと値をリストに接続

例:

Map<String,String> tags = new HashMap<>(); 
tags.put("k1","v1"); 
tags.put("k2","v2"); 

その後、私は、文字列

K1取得したい:V1、K2:v2の

は私のコードは次のとおりです。

private String transe(Map<String, String> tags) { 
    if (tags == null || tags.isEmpty()) { 
     return DEFAULT_STATUS_GROUP; 
    } 
    List<String> tagKVList = new ArrayList<>(); 
    tags.forEach((key, value) -> tagKVList.add(String.join(":", key, value))); 
    tagKVList.sort((tag1, tag2) -> tag1.compareTo(tag2)); 
    return tagKVList.stream().collect(Collectors.joining(",")); 
} 

をどのようにしてloを削除できますか? cal変数tagKVListを作成し、コードを明確にしますか?

+1

をラムダ式は便利な機能です、まだあなたが冗長なものを指定するためにそれらを必要はありません。 'String'は' Comparable'なので、 'compareTo'メソッドを持っているので、'(tag1、tag2) - > tag1.compareTo(tag2) 'コンパイラを指定する必要はありません。あなたは 'tagKVList.sort(null)'を使うことができます。また、型安全性を望むなら 'tagKVList.sort(Comparator.naturalOrder())'を使うこともできます。 – Holger

答えて

5

中間体は不要ですList。あなたがすでにそうであるようにあなたは、単一のStringからStringcollectentrySetmap各エントリをStreamことができます。

return tags.entrySet().stream() 
         .map(e-> String.join(":", e.getKey(), e.getValue())) 
         .sorted() 
         .collect(Collectors.joining(",")); 
+3

'' e.getKey()+ ":" + e.getValue() 'は' 'String.join(": "、e.getKey()、e.getValue())の代わりに" ...ああ、あなたは 'ソートされた()'ステップを忘れてしまった。 – Holger

+1

@Holgerありがとう、私はそのステップを逃した。 – Eran

関連する問題