투케이2K

326. (java/자바) [유틸 파일] listMapKeySort : List Map 형식 데이터 특정 key 값 기준 정렬 수행 본문

Java

326. (java/자바) [유틸 파일] listMapKeySort : List Map 형식 데이터 특정 key 값 기준 정렬 수행

투케이2K 2023. 4. 27. 21:44
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java

 

[소스 코드]

 

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

        /**
         * // -----------------------------------------
         * [listMapKeySort 메소드 설명]
         * // -----------------------------------------
         * 1. List Map 형식 데이터 특정 key 값 기준 정렬 수행
         * // -----------------------------------------
         * 2. 호출 방식 :
         *
         *         // [초기 배열 선언 실시]
         *         List<Map<String, Object>> listMap = new ArrayList<>();
         *
         *
         *         // [Map 데이터 생성 실시]
         *         Map<String, Object> map_1 = new HashMap<>();
         *         map_1.put("key_1", "value_1");
         *         map_1.put("step", 1);
         *
         *         Map<String, Object> map_3 = new HashMap<>();
         *         map_3.put("key_3", "value_3");
         *         map_3.put("step", 3);
         *
         *         Map<String, Object> map_2 = new HashMap<>();
         *         map_2.put("key_2", "value_2");
         *         map_2.put("step", 2);
         *
         *
         *         // [배열에 데이터 삽입]
         *         listMap.add(map_1);
         *         listMap.add(map_3);
         *         listMap.add(map_2);
         *
         *
         *         // [유틸 파일 호출]
         *         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}]
         * // -----------------------------------------
         * */


        // [리턴 데이터 선언 실시]
        List<Map<String, Object>> returnData = new ArrayList<>();


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

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

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


                // [2]. [Collections 을 사용해서 List 배열 데이터 정렬 실시]
                Collections.sort( returnData , new Comparator<Map>() {
                    @Override
                    public int compare(Map a, Map b) {

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

                        try {
                            // TODO [value 기준 정렬]
                            value_A = String.valueOf(a.get(key)); // [정렬하려는 key 지정]
                            value_B = String.valueOf(b.get(key)); // [정렬하려는 key 지정]
                        }
                        catch (Exception e) {
                            e.printStackTrace();
                        }

                        // TODO [value 기준 정렬]
                        if (C_Util.stringIsNumber(value_A) == true && C_Util.stringIsNumber(value_B) == true){
                            return Integer.compare(Integer.parseInt(value_A), Integer.parseInt(value_B)); // [integer]
                        }
                        else {
                            return value_A.compareTo(value_B); // [string]
                        }
                    }
                });

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


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


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

 

반응형
Comments