查找是不是在列表中找到具有特定属性值的元素
Posted
技术标签:
【中文标题】查找是不是在列表中找到具有特定属性值的元素【英文标题】:Find if an element with a specific property value is found in a list查找是否在列表中找到具有特定属性值的元素 【发布时间】:2020-06-11 15:57:07 【问题描述】:我正在尝试在 kotlin 的对象列表中查找一个值,为此使用“过滤器”,但如果找到该值,我需要返回 true 或 false,但过滤器会返回我的对象列表匹配的情况。
t.filter it.retailerId == value
¿当我在对象列表中找到该值时如何返回布尔值?
【问题讨论】:
你可以使用t.any it.retailerId == value
【参考方案1】:
您可以将firstOrNull()
与特定谓词一起使用:
val found = t.firstOrNull it.retailerId == value != null
如果firstOrNull()
没有返回null
,则表示找到了值。
【讨论】:
也不错,但如果可能的话,我正在寻找一种返回布尔值的方法。谢谢t.firstOrNull it.retailerId == value != null
返回一个布尔值。如果您的意思是直接返回布尔值的方法,请查看any()
。
请注意,如果列表可以为空并且谓词可能在 null
引用上返回 true
,则它会变得模棱两可。【参考方案2】:
如果你需要元素正好是一个:
t.filter it.retailerId == value .size == 1
如果没有:
t.any it.retailerId == value
使用 foldRight 并在找到时休息一下:
t.foldRight(false) val, res ->
if(it.retailerId == value)
return@foldRight true
else
res
【讨论】:
我正在搜索一个布尔值,因为我将在一行中集成另一个方法。 @VíctorMartín 我用 foldR 添加了另一个例子,它也返回一个布尔值【参考方案3】:除了firstOrNull
,您还可以将any
与相同的谓词一起使用:
val found = t.any it.retailerId == value
【讨论】:
【参考方案4】:Kotlin 有这个不错的扩展功能,你可以使用
if (none it.isSelected == true )
first().isSelected = true
【讨论】:
【参考方案5】:对于单个元素
list.first it.type == 2 (eg: conditions)
or
list.firstOrNull it.type == 2 (eg: conditions)
对于元素列表
list.filter it.type == 2 (eg: conditions)
【讨论】:
以上是关于查找是不是在列表中找到具有特定属性值的元素的主要内容,如果未能解决你的问题,请参考以下文章
如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?