2016-03-14 20 views
7

Java 8 Stream tương đương với số SelectMany của LINQ là gì?Dòng Java tương đương với LINQ SelectMany()

Ví dụ: trong C#, nếu tôi có Dictionary<string, List<Tag>> tags mà tôi muốn chuyển thành một số IEnumerable<Tag> (số đếm bằng phẳng của tất cả các thẻ trong từ điển), tôi sẽ làm tags.SelectMany(kvp => kvp.Value).

Có tương đương Java cho số Map<String, List<Tag>> có thể mang lại Stream<Tag> không?

Trả lời

9

Bạn đang tìm kiếm để flatMap tất cả các giá trị chứa trong bản đồ:

Map<String, List<Tag>> map = new HashMap<>(); 
Stream<Tag> stream = map.values().stream().flatMap(List::stream); 

Mã này đầu tiên lấy tất cả các giá trị của bản đồ như một Collection<List<Tag>> với values(), tạo ra một Stream ra khỏi bộ sưu tập này với stream() và sau đó bản đồ phẳng mỗi List<Tag> vào một số Stream với tham chiếu phương thức List::stream.

+0

Vậy flatMap() không liên quan gì đến java.util.Map? Điều tốt để biết, tôi đoán ... –

+1

@RobertFraser Họ không bị nhầm lẫn –

+2

@RobertFraser Tên đến từ [chức năng bản đồ] (https://en.wikipedia.org/wiki/Map_%28higher-order_function% 29) mà "ánh xạ một hàm" trên (một danh sách) các giá trị. – phg

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