在Kotlin中有一个简单的方法来获得_id的对象吗?

我是一个Kotlin的初学者,我希望在下面的数据结构中通过_id得到一个对象,所以我写了一个fun getMDetailByID(aMDetailsList:MDetailsList, _id:Long)...这是一个传统的方法。

但是我觉得这个乐趣太复杂了,有没有简单的方法呢? 如使用Lambdaexpression式。

 class UIMain : AppCompatActivity() { data class BluetoothDef(val Status:Boolean=false) data class WiFiDef(val Name:String, val Status:Boolean=false) data class MDetail ( val _id: Long, val bluetooth: BluetoothDef, val wiFi:WiFiDef ) data class MDetailsList(val mListMetail: MutableList) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_main) var mBluetoothDef1=BluetoothDef() var mWiFiDef1=WiFiDef("MyConnect 1",true) var aMDetail1= MDetail(5L,mBluetoothDef1,mWiFiDef1) var mBluetoothDef2=BluetoothDef(true) var mWiFiDef2=WiFiDef("MyConnect 2") var aMDetail2= MDetail(6L,mBluetoothDef2,mWiFiDef2) val mListMetail:MutableList = mutableListOf(aMDetail1,aMDetail2) var aMDetailsList=MDetailsList(mListMetail) var c=getMDetailByID(aMDetailsList,5L) } fun getMDetailByID(aMDetailsList:MDetailsList, _id:Long):MDetail?{ var aMDetail: MDetail?=null var a=aMDetailsList.mListMetail for (b in a){ if (b._id==_id){ aMDetail=b } } return aMDetail } } 

一个更快,更简单的替代当前的答案(它也比你最初的代码更好,因为它并不总是需要遍历整个列表):

 fun getMDetailByID(aMDetailsList: MDetailsList, _id: Long) = aMDetailsList.mListMetail.findLast { it._id == _id } 

另外,考虑你是否将MDetailsList定义为一个类,而不是直接使用(Mutable)List或将其设置为一个typealias。 有些情况下你确实需要这样的types,但是并不常见。

实际上,使用lambdaexpression式有一个更简单的方法。 你可以用下面的代码替换你的function代

 fun getMDetailByID(aMDetailsList: MDetailsList, _id: Long): MDetail? { return aMDetailsList.mListMetail.filter { it._id == _id }.lastOrNull() } 

它将和你的实现一样,返回最后一个匹配的元素,如果没有则返回null。

简单的代码可以是这样的:

 fun getMDetailByID(aMDetailsList: MDetailsList, _id: Long) = aMDetailsList.mListMetail.filter { it._id == _id }.lastOrNull()