자바에서 람다를 다루기 위한 노력



코틀린에서의 람다


fun main() {
    val fruits = listOf(
        Fruit("사과", 1000),
        Fruit("사과", 1200),
        Fruit("사과", 1200),
        Fruit("사과", 1500),
        Fruit("바나나", 3000),
        Fruit("바나나", 3200),
        Fruit("바나나", 2500),
        Fruit("수박", 10000)
    )

    val isApple = fun(fruit: Fruit): Boolean {
        return fruit.name == "사과"
    }

    val isApple2 = { fruit: Fruit -> fruit.name == "사과" }

    val isApple3: (Fruit) -> Boolean = fun(fruit: Fruit): Boolean {
        return fruit.name == "사과"
    }

    val isApple4: (Fruit) -> Boolean = { fruit: Fruit -> fruit.name == "사과" }

    isApple(fruits[0])
    isApple.invoke(fruits[0])

    val filterFruits = filterFruits(fruits, isApple)

    for (filterFruit in filterFruits) {
        println("name: ${filterFruit.name}, price: ${filterFruit.price}")
    }

		filterFruits(fruits, {fruit: Fruit -> fruit.name == "사과"})
		filterFruits(fruits) { fruit: Fruit -> fruit.name == "사과" }
		filterFruits(fruits) { fruit -> fruit.name == "사과" }
		filterFruits(fruits) { a -> a.name == "사과" }
		filterFruits(fruits) { it.name == "사과" }
}

private fun filterFruits(
    fruits: List<Fruit>,
    filter: (Fruit) -> Boolean
): List<Fruit> {
    val results = mutableListOf<Fruit>()
    for (fruit in fruits) {
        if (filter(fruit)) {
            results.add(fruit)
        }
    }
    return results
}

Closure