查找是不是在列表中找到具有特定属性值的元素

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) 

【讨论】:

以上是关于查找是不是在列表中找到具有特定属性值的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

在列表中查找具有特定值的对象

Python列表查找具有接近值的元素

在具有显式键值的对象列表中查找元素

Symfony DomCrawler:查找具有特定属性值的元素

Python二分搜索类函数,用于查找排序列表中大于特定值的第一个数字