को मैं एक समारोह है कि एक List
में हर आइटम है कि पहले या अंतिम आइटम नहीं है देता है लिखना चाहते हैं (बिंदु के माध्यम से)। फ़ंक्शन को इनपुट के रूप में एक सामान्य List<*>
मिलता है। एक परिणाम केवल किया जाना चाहिये अगर सूची के तत्वों प्रकार Waypoint
के होते हैं:Kotlin: कैसे सूची के साथ काम करने डाले: अनियंत्रित कास्ट: kotlin.collections.List <Kotlin.Any?> kotlin.colletions.List <Waypoint>
अनियंत्रित कास्ट: kotlin.collections
fun getViaPoints(list: List<*>): List<Waypoint>? { list.forEach { if(it !is Waypoint) return null } val waypointList = list as? List<Waypoint> ?: return null return waypointList.filter{ waypointList.indexOf(it) != 0 && waypointList.indexOf(it) != waypointList.lastIndex} }
जब
List<*>
कोList<Waypoint>
कास्टिंग, मैं चेतावनी मिलती है। सूची kotlin.colletions.List को
मैं इसे अन्यथा लागू करने के लिए एक तरह से समझ नहीं कर सकते हैं। इस चेतावनी के बिना इस समारोह को लागू करने का सही तरीका क्या है?
बेहतरीन उत्तर! मैं list.filterIsInstance() समाधान चुनता हूं क्योंकि मुझे लगता है कि यह सबसे साफ समाधान है। –
lukle
ध्यान दें कि यदि आप ['filterIsInstance'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter-is-instance.html) का उपयोग करते हैं और मूल सूची में एक अलग प्रकार के तत्व होते हैं आपका कोड चुपचाप उन्हें फ़िल्टर करेगा। कभी-कभी यह वही है जो आप चाहते हैं लेकिन कभी-कभी आपको 'IllegalStateException' या इसी तरह फेंक दिया जा सकता है। यदि बाद में मामला है तो आप जांचने के लिए अपनी विधि बना सकते हैं और फिर कास्ट कर सकते हैं: 'इनलाइन मजेदार इटेबल <*> .mapAsInstance() = map {it.apply {चेक (यह आर)} आर} ' –
mfulton26
नोट करें कि नोट करें '.apply' lambda के रिटर्न वैल्यू को वापस नहीं करता है, यह प्राप्त ऑब्जेक्ट देता है। यदि आप एक शून्य वापस करने का विकल्प चाहते हैं तो शायद आप '.takeIf' का उपयोग करना चाहते हैं। – bj0