투케이2K

278. (kotlin/코틀린) [유틸 파일] listMapKeySort : List Map 형식 데이터 특정 key 값 기준 정렬 수행 본문

Kotlin

278. (kotlin/코틀린) [유틸 파일] listMapKeySort : List Map 형식 데이터 특정 key 값 기준 정렬 수행

투케이2K 2023. 4. 27. 21:45

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

        // ----------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [RETURN] listMapKeySort : List Map 형식 데이터 특정 key 값 기준 정렬 수행
        // ----------------------------------------------------------------------------------
        fun listMapKeySort(listMap: List<Map<String, Any>>, key: String): List<Map<String, Any>> {

            /**
             * // -----------------------------------------
             * [listMapKeySort 메소드 설명]
             * // -----------------------------------------
             * 1. List Map 형식 데이터 특정 key 값 기준 정렬 수행
             * // -----------------------------------------
             *
             * // [유틸 파일 호출]
             * C_Util.listMapKeySort(listMap, "step")
             *
             * // -----------------------------------------
             * 3. 리턴 데이터 : 특정 key 값 기준으로 정렬된 데이터
             *
             * [{key_1=value_1, step=1}, {key_2=value_2, step=2}, {key_3=value_3, step=3}]
             * // -----------------------------------------
             */


            // [리턴 데이터 선언 실시]
            var returnData: List<Map<String, Any>> = ArrayList()


            // [로직 처리 수행 실시]
            try {

                // [사전 인풋 데이터 널 체크 실시]
                if (listMap != null && listMap.size > 0 && listMap.toString().contains(key) == true) { // [널이 아니고, key 값을 포함하는 경우]

                    // [1]. [인풋 값 삽입 실시]
                    returnData = listMap


                    // [2]. [Collections 을 사용해서 List 배열 데이터 정렬 실시]
                    Collections.sort(returnData, object : Comparator<Map<String, Any>> {
                        override fun compare(a: Map<String, Any>, b: Map<String, Any>): Int {

                            // TODO [value 변수 선언]
                            var value_A = ""
                            var value_B = ""

                            try {

                                // TODO [value 기준 정렬]
                                value_A = a[key].toString() // [정렬하려는 key 지정]
                                value_B = b[key].toString() // [정렬하려는 key 지정]

                            } catch (e: Exception) {
                                e.printStackTrace()
                            }

                            // TODO [value 기준 정렬]
                            return if (C_Util.stringIsNumber(value_A) == true && C_Util.stringIsNumber(value_B) == true) {
                                Integer.compare(value_A.toInt(), value_B.toInt()) // [integer]
                            } else {
                                value_A.compareTo(value_B) // [string]
                            }
                        }
                    })
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }


            // [로그 출력]
            // ===============================================================
            S_Log._D_("listMapKeySort :: List Map 형식 데이터 특정 key 값 기준 정렬 수행", arrayOf(
                    "INPUT [LIST] :: " + listMap.toString(),
                    "INPUT [KEY] :: $key",
                    "RETURN :: $returnData"
                )
            )
            // ===============================================================


            // [리턴 데이터 반환 실시]
            return returnData
        }

 

반응형
Comments