मैं जैसे एक धारा है:Java8 स्ट्रीम - स्ट्रीम भिन्न के साथ डुप्लिकेट निकालें
Arrays.stream(new String[]{"matt", "jason", "michael"});
मैं ऐसे नाम हैं जो एक ही अक्षर से शुरु दूर करने के लिए इतना है कि केवल एक ही नाम (कोई फर्क नहीं पड़ता जो) शुरुआत चाहते हैं उस पत्र के साथ छोड़ दिया गया है।
मैं समझने की कोशिश कर रहा हूं कि distinct()
विधि कैसे काम करती है। मैंने प्रलेखन में पढ़ा है कि यह किसी ऑब्जेक्ट की "बराबर" विधि पर आधारित है। हालांकि, जब मैं स्ट्रिंग को लपेटने का प्रयास करता हूं, तो मुझे लगता है कि बराबर विधि कभी नहीं बुलाई जाती है और कुछ भी नहीं हटाया जाता है। क्या मैं यहाँ कुछ याद कर रहा हूँ?
आवरण वर्ग:
static class Wrp {
String test;
Wrp(String s){
this.test = s;
}
@Override
public boolean equals(Object other){
return this.test.charAt(0) == ((Wrp) other).test.charAt(0);
}
}
और कुछ सरल कोड:
public static void main(String[] args) {
Arrays.stream(new String[]{"matt", "jason", "michael"})
.map(Wrp::new)
.distinct()
.map(wrp -> wrp.test)
.forEach(System.out::println);
}
वहाँ तकनीक मैं [इस उत्तर] में वर्णित है (http://stackoverflow.com/a/27872086/1441122)। (उत्तर के अंत तक स्क्रॉल करें)। यह आपको 'फिल्टर (विशिष्ट ByKey (एस -> s.charAt (0)) करने देता है) '। –
साइड नोट: शाब्दिकों की एक धारा के लिए, 'Stream.of ("मैट", "जेसन", "माइकल") का उपयोग करना अक्सर आसान होता है। –