2015-10-05 13 views
9

私はGuavaを愛したJava 8のマップを文字列に参加する、と私はグァバをたくさん使用し続けます。しかし、それは理にかなっている、私の代わりにのJava 8に「新しいもの」を使用してみてください。最もエレガントな方法は、

"問題"

は、私がStringにURL属性に参加したいとしましょう。 resulta=1&b=2&c=3ある

Map<String, String> attributes = new HashMap<>(); 
attributes.put("a", "1"); 
attributes.put("b", "2"); 
attributes.put("c", "3"); 

// Guava way 
String result = Joiner.on("&").withKeyValueSeparator("=").join(attributes); 

グアバで私はこのようにそれを行うだろう。 (任意のサードパーティのライブラリなし)のJava 8でこれを行うための最もエレガントな方法は何

質問

+0

「のみ使用してJava 8」は、かなり曖昧ですJavaの7の任意のライブラリをせずに、Javaの8を使用している意味する何のJava 8 –

+2

でもを行うことができます。ライブラリがこの練習をするならば、目的を破るだろう。 Java 8には、Java 7にはない素晴らしいapisと構文の変更が付属しています。どのようなエレガントなプログラミングのために開きます。 – tomaj

+2

サイドノート:あなたはURLのクエリ文字列を作成したい場合は、キー名または値で表示されることがあり、特殊文字をエスケープする必要があるとして、あなたは間違った方法でこれをやっています。 –

答えて

15

その後、Collectors.joining(CharSequence delimiter)を使用して単一の文字列でそれらを結ぶ、あなたがしたい文字列表現に各エントリをマップ、マップのエントリセットの流れをつかむことができます。

import static java.util.stream.Collectors.joining; 

String s = attributes.entrySet() 
        .stream() 
        .map(e -> e.getKey()+"="+e.getValue()) 
        .collect(joining("&")); 

しかし、形式key=value内のエントリのtoString()すでに出力その内容以来、あなたはそのtoString直接メソッドを呼び出すことができ

:あなたが何かできるので、

String s = attributes.entrySet() 
        .stream() 
        .map(Object::toString) 
        .collect(joining("&")); 
+6

注意。 –

+1

これが私が最初の選択肢を提供した理由です。 –

関連する問題