2016-03-14 9 views
7

LINQ के SelectMany के समतुल्य Java 8 Stream क्या है?LINQ SelectMany के बराबर जावा स्ट्रीम()

उदाहरण के लिए, सी # में, अगर मैं Dictionary<string, List<Tag>> tags है कि मैं एक IEnumerable<Tag> (शब्दकोश में सभी टैग के एक फ्लैट गणनीय) में बदल करना चाहते हैं, मैं tags.SelectMany(kvp => kvp.Value) करना होगा।

क्या Map<String, List<Tag>> के लिए जावा समकक्ष है जो Stream<Tag> उत्पन्न करेगा?

उत्तर

9

आप flatMap करने के लिए देख रहे हैं सभी मूल्यों मानचित्र में निहित:

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

इस कोड को पहले values() के साथ एक Collection<List<Tag>> के रूप में नक्शे के सभी मानों प्राप्त करता है, stream() के साथ इस संग्रह से बाहर एक स्ट्रीम बनाता है , और फिर प्रत्येक List<Tag> को Stream में विधि संदर्भ List::stream के साथ फ्लैट मानचित्रों को फ्लैट मानचित्र।

+0

तो flatMap() java.util.Map से कुछ लेना देना नहीं है? जानना अच्छा है, मुझे लगता है ... –

+1

@RobertFraser वे उलझन में नहीं हैं –

+2

@RobertFraser नाम [मानचित्र फ़ंक्शन] से आता है (https://en.wikipedia.org/wiki/Map_%28higher-order_function% 2 9) जो मूल्यों की एक सूची ("सूची) पर" एक समारोह को मानचित्रित करता है "। – phg

संबंधित मुद्दे