반응형
코틀린의 운선순위 큐는 Comparator를 전달하여 사용한다.
var pq = PriorityQueue<T>(Comparator{a,b -> 조건식}) 구조
진하게 한 부분은 람다식
다만, 람다식을 이용해서
var pq = PriorityQueue<T>{a,b -> 조건식}
이렇게 간단하게 표현할 수 있다.
코드
import java.util.*
fun main() {
var lambda = {a:Int,b:Int-> when{
a<b -> 1
a>b -> -1
else -> 0
}}
var pq = PriorityQueue(Comparator<Pair<Int,Int>>{a,b ->
when{
a.first !=b.first -> lambda(a.first,b.first)
else -> lambda(a.second, b.second)
}})
var pq2 = PriorityQueue{a:Pair<Int,Int>,b:Pair<Int,Int> ->
when{
a.first !=b.first -> lambda(a.first,b.first)
else -> lambda(a.second, b.second)
}}
pq.add(Pair(1,2))
pq.add(Pair(100,2))
pq.add(Pair(2345,2))
pq.add(Pair(90,123))
pq.add(Pair(90,2))
pq.add(Pair(90,12))
pq2.add(Pair(1,2))
pq2.add(Pair(100,2))
pq2.add(Pair(2345,2))
pq2.add(Pair(90,123))
pq2.add(Pair(90,2))
pq2.add(Pair(90,12))
while(pq.isNotEmpty()) {
var item = pq.poll()
println("${item.first} ${item.second}")
}
println("===pq2===")
while(pq2.isNotEmpty()) {
var item = pq2.poll()
println("${item.first} ${item.second}")
}
}
결과
이는 sortWith에도 그대로 적용된다
class SortTEst{
fun test(){
var arr = ArrayList<Pair<Int,Int>>()
var arr2 = ArrayList<Pair<Int,Int>>()
arr.add(Pair(1,2))
arr.add(Pair(100,2))
arr.add(Pair(2345,2))
arr.add(Pair(90,123))
arr.add(Pair(90,2))
arr.add(Pair(90,12))
arr.sortWith{a:Pair<Int,Int>,b:Pair<Int,Int> ->
when{
a.first !=b.first -> lambda(a.first,b.first)
else -> lambda(a.second, b.second)
}}
println("sortWith")
arr.forEach{println("${it.first} ${it.second}")}
}
}
반응형
'공부 > 코틀린' 카테고리의 다른 글
[Kotlin] 파일 입출력 방법 (0) | 2021.05.02 |
---|---|
[Kotlin] 상속과 위임 (0) | 2021.04.26 |
[Kotlin] let, with, run, apply, also 차이 (0) | 2021.04.21 |