2015-10-05 41 views
9

Tôi yêu Guava và tôi sẽ tiếp tục sử dụng rất nhiều Guava. Tuy nhiên, ở những nơi có ý nghĩa, tôi cố gắng sử dụng "nội dung mới" trong số Java 8 thay thế.Cách thanh lịch nhất để tham gia Bản đồ với một Chuỗi trong Java 8

"Vấn đề"

phép nói rằng tôi muốn tham gia url thuộc tính trong một String. Trong Ổi tôi sẽ làm điều đó như thế này:

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

Trường hợp resulta=1&b=2&c=3.

Câu hỏi

cách thanh lịch nhất để làm điều này trong Java 8 là gì (không có bất kỳ thư viện của bên thứ 3)?

+0

"chỉ sử dụng Java 8" là khá mơ hồ, vì bất cứ điều gì bạn có thể làm trong Java 7 cũng có thể được thực hiện trong Java 8. –

+2

Có nghĩa là sử dụng Java 8, không có bất kỳ thư viện nào. Thư viện sẽ đánh bại mục đích nếu bài tập này. Java 8 cũng đi kèm với một số apis đẹp và các thay đổi cú pháp, mà Java 7 không có. Mà mở ra cho một số chương trình thanh lịch. – tomaj

+2

Lưu ý phụ: nếu bạn muốn tạo chuỗi truy vấn URL, bạn đang thực hiện điều này theo cách sai khi bạn cần phải thoát khỏi các ký tự đặc biệt có thể xuất hiện trong các tên hoặc giá trị chính. –

Trả lời

15

Bạn có thể lấy luồng tập hợp mục nhập của bản đồ, sau đó ánh xạ từng mục nhập vào biểu diễn chuỗi bạn muốn, nối chúng vào một chuỗi đơn bằng cách sử dụng Collectors.joining(CharSequence delimiter).

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

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

Nhưng kể từ toString() đã ra nội dung của nó của mục trong định dạng key=value, bạn có thể gọi toString phương pháp của nó trực tiếp:

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

Lưu ý rằng trong khi các mục 'HashMap' thực sự được in ở định dạng' khóa = giá trị', thì điều này không bao giờ được chỉ định, do đó thực tế là không dựa vào thực tế này. –

+1

Đó là lý do tại sao tôi đã cung cấp giải pháp thay thế đầu tiên. –

Các vấn đề liên quan