ओह, उन मुश्किल जावा 8 स्ट्रीम लैम्बडास के साथ। वे बहुत शक्तिशाली हैं, फिर भी जटिलताएं इसके चारों ओर किसी के शीर्षलेख को लपेटने के लिए थोड़ा सा लेती हैं।जावा में संपत्ति द्वारा छंटनी 8 स्ट्रीम
मान लें कि मेरे पास User
संपत्ति User.getName()
है। मान लें कि मेरे पास उन उपयोगकर्ताओं का नक्शा है Map<String, User>
नामों से जुड़े (उदाहरण के लिए उपयोगकर्ता नाम लॉगिन करें)। आइए आगे यह कहें कि मेरे पास उपयोगकर्ता नामों को सॉर्ट करने के लिए तुलनित्र UserNameComparator.INSTANCE
का उदाहरण है (शायद फैंसी कोलेटर और ऐसे)।
तो मैं मानचित्र में उपयोगकर्ताओं की सूची कैसे प्राप्त करूं, उपयोगकर्ता नाम द्वारा क्रमबद्ध? मैं नक्शा कुंजी अनदेखा कर सकते हैं और ऐसा करते हैं:
return userMap.values()
.stream()
.sorted((u1, u2) -> {
return UserNameComparator.INSTANCE.compare(u1.getName(), u2.getName());
})
.collect(Collectors.toList());
लेकिन उस लाइन जहां मैं नाम UserNameComparator.INSTANCE
उपयोग करने के लिए निकालने के लिए है बहुत अधिक शारीरिक श्रम की तरह लगता है। क्या कोई तरीका है कि मैं आसानी से सॉर्टिंग के लिए User::getName
कुछ मैपिंग फ़ंक्शन के रूप में आपूर्ति कर सकता हूं, और अभी भी एकत्रित सूची में User
उदाहरण प्राप्त कर सकता हूं?
बोनस: क्या होगा यदि मैं जिस चीज को सॉर्ट करना चाहता था, वह दो स्तरों की गहराई थी, जैसे कि User.getProfile().getUsername()
?
वाह का प्रयोग करेंगे, मेरे मस्तिष्क लगभग दर्द होता है, लेकिन है कि मैं वास्तव में क्या देख रहा था था बोनस और सब कुछ के लिए! और सुपर-त्वरित प्रतिक्रिया भी। धन्यवाद! –