2015-06-12 11 views
6

मेरे पास pojos की एक सूची है जिसे मैं कुछ समूह करना चाहता हूं। कुछ की तरह:जावा 8 लैम्बडास एकाधिक फ़ील्ड द्वारा समूहित

public class Pojo { 
    private final Category category; 
    private final BigDecimal someValue; 
} 

public class Category { 
    private final String majorCategory; 
    private final String minorCategory; 
} 

मैं एक Map<String, Map<String, List<Pojo>>> चाहते हैं, जहां कुंजी majorCategory है और मूल्य एक Map कुंजी minorCategory और मूल्यों के साथ minorCategory कहा के लिए एक Pojo की List वस्तुओं है।

मैं इसे प्राप्त करने के लिए जावा 8 लैम्बडा का उपयोग करना चाहता हूं। मैं निम्नलिखित के साथ किया समूह के प्रथम स्तर प्राप्त कर सकते हैं:

Map<String, Pojo> result = list 
    .stream() 
    .collect(groupingBy(p -> p.getCategory().getMajorCategory())); 

कैसे मैं अब minorCategory पर फिर से समूह और Map<String, Map<String, List<Pojo>>> मैं इच्छा मिल सकता है?

अद्यतन

प्रदान की पहले उत्तर शुरू में प्रदान की उदाहरण के लिए सही है, तथापि मैं के बाद से सवाल को अद्यतन किया है। स्वीकृत उत्तर में रूबेन की टिप्पणी, पहेली का अंतिम टुकड़ा प्रदान करती है।

उत्तर

13
groupingBy(Pojo::getMajorCategory, groupingBy(Pojo::getMinorCategory)) 

काम करना चाहिए, मुझे लगता है कि?

+1

इसके लिए धन्यवाद, यह मेरे प्रश्न में उदाहरण के लिए काम करता है लेकिन मैं oversimplified हो सकता है। मैं वास्तव में अपने pojo, नाम, कहने, श्रेणी के अंदर निहित वस्तु पर एक क्षेत्र पर समूह कर रहा हूँ। मैंने कोशिश की '.collect (groupingBy (p -> p.getCategory()। GetMajorCategory(), groupingBy (p -> p.getCategory()। GetMinorCategory()))' लेकिन यह सरसों काट नहीं देता है। क्या आपके पास कोई विचार है? ' –

+5

@RobertBain list.stream()। संग्रह (समूहिंग ((Pojo p) -> p.getCategory()। GetMajorCategory(), groupingBy ((Pojo p) -> p.getCategory()। getMinorCategory()))); – Ruben

+0

सभी उत्तरों के बीच क्या अंतर है ..? –

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