2015-10-05 15 views
9

Guava'u seviyorum ve Guava'yı çok kullanmaya devam edeceğim. Ancak, mantıklı olduğu yerde, Java 8 yerine "yeni şeyler" kullanmayı deniyorum.Java'da bir String'e bir Haritaya katılmanın en zarif yolu 8

"Sorunu"

Ben url bir String niteliklerini katılmak istiyorsunuz diyelim. Guava ben böyle yapmak olacaktır:

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); 

resulta=1&b=2&c=3 olduğu yere.

Soru

Java 8 bunu yapmanın en zarif yolu nedir (herhangi bir 3. parti kütüphaneleri olmadan)?

+0

"Yalnızca kullanarak Java 8" oldukça muğlak Java 7'de Java 8'de de yapılabilir. –

+2

Herhangi bir kütüphane olmaksızın Java 8 kullanmak anlamına gelir. Bu alıştırmalar eğer kütüphaneler bu amacı yenerdi. Java 8, Java 7'nin sahip olmadığı bazı güzel apis ve sözdizimi değişiklikleriyle de gelir. Bazı zarif programlama için açılır. – tomaj

+2

Bir yan not: Bir URL sorgusu dizesi oluşturmak isterseniz, bunu, anahtar adlarında veya değerlerde görünebilecek özel karakterlerden kaçmanız gerektiğinden yanlış şekilde yapıyorsunuz demektir. –

cevap

15

Haritanın giriş kümesinin akışını yakalayabilir ve ardından her girişi Collectors.joining(CharSequence delimiter) kullanarak tek bir dize içinde birleştirerek istediğiniz dize gösterimine eşleyebilirsiniz.

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

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

Ama formatında key=value yılında girişin toString() zaten çıkış içeriği beri, onun toString yönteminden doğrudan çağırabilir

: Yapabileceğiniz şey beri

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

'HashMap' girdileri aslında 'anahtar = değer' biçiminde yazdırılırken, bu hiçbir zaman belirtilmediğinden, bu gerçeğe güvenmenin kötü bir uygulama olduğunu unutmayın. –

+1

Bu yüzden ilk alternatifi sundum. –

İlgili konular