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

Víc*_*tín 11 contains list find kotlin

我试图在 kotlin 的对象列表中找到一个值,使用它“过滤器”,但如果找到该值,我需要返回 true 或 false,但过滤器在匹配的情况下返回一个对象列表.

t.filter { it.retailerId == value }
Run Code Online (Sandbox Code Playgroud)

¿如何在对象列表中找到此值时返回布尔值?

Nic*_*zzi 14

或者,firstOrNull您也可以使用any相同的谓词:

val found = t.any { it.retailerId == value }
Run Code Online (Sandbox Code Playgroud)


Dam*_*ero 11

如果您需要元素正好是一:

t.filter { it.retailerId == value }.size == 1
Run Code Online (Sandbox Code Playgroud)

如果不:

t.any { it.retailerId == value }
Run Code Online (Sandbox Code Playgroud)

使用 foldRight 并在找到它时休息一下:

t.foldRight(false) {val, res ->
                if(it.retailerId == value) {
                    return@foldRight true
                } else {
                    res
                }
            }
Run Code Online (Sandbox Code Playgroud)


for*_*pas 9

firstOrNull()您可以与特定谓词一起使用:

val found = t.firstOrNull { it.retailerId == value } != null
Run Code Online (Sandbox Code Playgroud)

如果firstOrNull()不返回null,则表示已找到该值。

  • `t.firstOrNull { it.retailerId == value } != null` 返回一个布尔值。如果您指的是直接返回布尔值的方法,请查看“any()”。 (2认同)