मुझे हाल ही में कुछ जावा कोड को ट्विक करने का अवसर मिला और कुछ नई जावा 8 सुविधाओं का लाभ उठाने में सक्षम था। एक विशेष मामले में मुझे वस्तुओं की सूची से (स्ट्रिंग) .Name
गुणों की एक सूची प्राप्त करने की आवश्यकता थी। मैं क्या किया का एक सरलीकृत उदाहरण था: (? अभी तक)सी # जावा 8 के बराबर "विधि संदर्भ"
// sample data: <Thing> objects have a single String property called "Name"
List<Thing> thingList = new ArrayList<>(Arrays.asList(new Thing("Thing1"), new Thing("Thing2")));
// first pass
List<String> nameList = new ArrayList<>();
thingList.forEach(x -> nameList.add(x.getName()));
// refinement 1: use stream, map, and collect
List<String> nameList1 = thingList.stream().map(x -> x.getName()).collect(Collectors.toList());
// refinement 2: use "Thing::getName" method reference
List<String> nameList2 = thingList.stream().map(Thing::getName).collect(Collectors.toList());
मैं देखना कैसे उन दृष्टिकोण सी # करने के लिए अनुवाद होगा उत्सुक था, और मैं
// sample data: <Thing> objects have a single String property called "Name"
var thingList = new List<Thing> { new Thing("Thing1"), new Thing("Thing2") };
// first pass
var nameList = new List<String>();
thingList.ForEach(x => nameList.Add(x.Name));
// refinement 1: use Select and ToList
List<String> nameList1 = thingList.Select(x => x.Name).ToList();
मिला क्या मैं नहीं मिला है है लम्बा अभिव्यक्ति को कुछ (थोड़ा सा) अधिक संक्षिप्त के साथ बदलने के लिए "परिशोधन 2" के बराबर एक सी # समकक्ष। क्या इस मामले में जावा 8 "विधि संदर्भ" के बराबर सी # # है, यह देखते हुए कि मैं प्रत्येक ऑब्जेक्ट की संपत्ति प्राप्त करने की कोशिश कर रहा हूं (जो जावा में getProperty
विधि का उपयोग करके किया जाता है)?
लेकिन '.Select (getName)' एक वाक्य रचना चीनी है कि एक विधि संदर्भ की तरह लग रहा है, अनिवार्य रूप से यह अभी भी '.Select (x => getName (एक्स)) '। –
बहुत यकीन है कि यह एक विधि संदर्भ है। लेकिन तो क्या चीनी है? ओपी सिर्फ छोटा कोड चाहता है। क्या फर्क पड़ता है? – Blorgbeard
@ डैनी चेन: "अनिवार्य रूप से" जावा 8 का विधि संदर्भ भी निर्दिष्ट विधि का आह्वान करते हुए लैम्ब्डा अभिव्यक्ति के लिए वाक्य रचनात्मक चीनी है। हालांकि, तकनीकी रूप से, यह एक और तरीका है, लैम्ब्डा अभिव्यक्ति लैम्ब्डा के शरीर को पकड़ने वाली एक अतिरिक्त विधि के संदर्भ में सिंटैक्टिक चीनी है। – Holger