본문 바로가기

# 02/코틀린

[Kotlin] Lambda

반응형

Lambdas


-> java

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick (View view) {

view.setAlpha(0.5f);

}

});



-> kotlin

button.setOnClickListener {

view -> view.alpha = 0.5f

}

-> view 생략가능 파라미터가 한개인 경우

button.setOnClickListener {

it.alpha = 0.5f

}


it : implicit name of a single parameter




Lambdas Closures


-> java

int count = 0;

Button button = findViewById(R.id.button);

button.setOnClickListener ( new View.OnClickListener() {

@Override

public void onClick(View view) {

count++;                                                                   // count 접근 못함. error 뜸

}

});


// 다음과 같이 해결한다.

final int[] count = {0};

Button button = findViewById(R.id.button);

button.setOnClickListener ( new View.OnClickListener() {

@Override

public void onClick(View view) {

count[0]++;                                                                   // count 접근 못함. error 뜸

}

});



-> kotlin

var count = 0

button.setOnClickListener {

count++

}


var sum = 0

ints.filter {it > 0}.forEach {

sum += it

}

print(sum)




Lambdas return


button.setOnTouchListener { view, motionEvent ->

// 마지막 줄이 return에 해당한다.

true

}




stream


-> java

for (Integer integer : list) {

if (integer > 5) {

integer *= 2;

Log.e("TAG", "Index " + integer);

}

}



-> kotlin

val list = mutableListOf(1, 2, 3, 4, 5)

list.filter { item -> item > 5 }.map { item -> Log.d("TAG", "index ${item * 2}") }


-> item을 지우고 it으로 대체

val list = mutableListOf (1, 2, 3, 4, 5)

list.filter { it > 5 }.map { Log.d("TAG", "index ${it * 2}") }




stream - map


val map = mutableMapOf (1 to "value", 2 to "value", 3 to "value")

map.forEach { item ->

println("key ${item.key} value ${item.value}")

}


-> item을 지우고 it으로 대체

val map = mutableMapOf (1 to "value", 2 to "value", 3 to "value")

map.forEach {

println("key ${it.key} value ${it.value}")

}




val map = mutableMapOf ( 1 to "value", 2 to "value", 3 to "value")

map.forEach { _, value ->

println("value $value")

}


forEach {key, value ->} 는 minSdk 21 이상에서 사용 가능함


반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] Null 처리 방법  (0) 2019.07.11
[Kotlin] return and jumps and This-expressions  (0) 2019.07.11
[Kotlin] Control Flow - if/when/loops  (0) 2019.07.11
[Kotlin] Function  (0) 2019.07.11
[Kotlin] Class  (0) 2019.07.11