मेरे पास 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>>>
मैं इच्छा मिल सकता है?
अद्यतन
प्रदान की पहले उत्तर शुरू में प्रदान की उदाहरण के लिए सही है, तथापि मैं के बाद से सवाल को अद्यतन किया है। स्वीकृत उत्तर में रूबेन की टिप्पणी, पहेली का अंतिम टुकड़ा प्रदान करती है।
इसके लिए धन्यवाद, यह मेरे प्रश्न में उदाहरण के लिए काम करता है लेकिन मैं oversimplified हो सकता है। मैं वास्तव में अपने pojo, नाम, कहने, श्रेणी के अंदर निहित वस्तु पर एक क्षेत्र पर समूह कर रहा हूँ। मैंने कोशिश की '.collect (groupingBy (p -> p.getCategory()। GetMajorCategory(), groupingBy (p -> p.getCategory()। GetMinorCategory()))' लेकिन यह सरसों काट नहीं देता है। क्या आपके पास कोई विचार है? ' –
@RobertBain list.stream()। संग्रह (समूहिंग ((Pojo p) -> p.getCategory()। GetMajorCategory(), groupingBy ((Pojo p) -> p.getCategory()। getMinorCategory()))); – Ruben
सभी उत्तरों के बीच क्या अंतर है ..? –