Kotlinは、ストリームに似たプログラミングを可能にする便利な拡張機能を提供しています。例えばネストされたリスト内の要素を最もうまく見つけるには?
、私は、リスト内の要素を探している場合、私はfind
を使用することができます。
return list.find { n -> n>4 && n<6 }
しかし、私は入れ子になっているのリストを持っている場合、これは私のために実用的ではないようです。それは私foは思わ
private fun findUsingForEach(data: List<List<Int>>, pred : (Int) -> Boolean) : Optional<Int> {
data.forEach { list ->
list.forEach { n ->
if(pred(n)) return Optional.of(n)
}
}
return Optional.empty()
}
forEach
は、そのための適切なツールではないこと:luckyly私はKotlinと内側のラムダから返すことができます - 私はTUが、その後forEach
を使用しています。これのためにもっと機能的な方法がありますか? filter
が気になりますが、入れ子が問題を引き起こします。
follwingは、私は、関数abouveに使用するテストであること:
@Test
open fun findTest() {
val data = listOf(listOf(1,2,3), listOf(3,4,5,6), listOf(), listOf(6,7,8))
val e = findUsingForEach(data, { n -> n>4 && n < 6 })
assertEquals(5, e.get())
}
「asSequence」に言及するためのボーナスポイント。 +1 – towi