본문 바로가기

공부/코틀린

[Kotlin] PriorityQueue, sortWith 사용법 (Comparator 사용)

반응형

코틀린의 운선순위 큐는 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