반응형

📝List 정렬

public void sort(){

    /** 초기 데이터 init **/
    List<String> list = Arrays.asList("banana", "apple", "cherry");

    /** 오름차순 정렬 **/
    list.sort(Comparator.naturalOrder());
    System.out.println("오름차순: " + list);
    // 오름차순: [apple, banana, cherry]

    /** 내림차순 정렬 **/
    list.sort(Comparator.reverseOrder());
    System.out.println("내림차순: " + list);
    // 내림차순: [cherry, banana, apple]

}

 

📝Map정렬

  public void sort() {

    /** 초기 데이터 init **/
    Map<String, Integer> map = new HashMap<>();
    map.put("apple", 3);
    map.put("banana", 1);
    map.put("cherry", 2);

    /** Map.Entry 리스트로 변환 **/
    List<Map.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet());

    /** 키(key) 기준으로 오름차순 정렬 **/
    entryList.sort(Map.Entry.comparingByKey());
    System.out.println("키 기준 오름차순: " + entryList);
    // 키 기준 오름차순: [apple=3, banana=1, cherry=2]

    /** 키(key) 기준으로 내림차순 정렬 **/
    entryList.sort(Map.Entry.<String, Integer>comparingByKey().reversed());
    System.out.println("키 기준 내림차순: " + entryList);
    // 키 기준 내림차순: [cherry=2, banana=1, apple=3]

    /** 값(value) 기준으로 오름차순 정렬 **/
    entryList.sort(Map.Entry.comparingByValue());
    System.out.println("값 기준 오름차순: " + entryList);
    // 값 기준 오름차순: [banana=1, cherry=2, apple=3]

    /** 값(value) 기준으로 내림차순 정렬 **/
    entryList.sort(Map.Entry.<String, Integer>comparingByValue().reversed());
    System.out.println("값 기준 내림차순: " + entryList);
    // 값 기준 내림차순: [apple=3, cherry=2, banana=1]

  }

Map은 직접 정렬할 수 없어서 Map.Entry로 변환한 후에 List로 담아서 사용이 가능합니다.

 

📝 JSONArray 정렬

public void sort() throws JSONException {

    /** 초기 데이터 init **/
    String jsonData = "["
        + "{\"name\":\"banana\",\"price\":1},"
        + "{\"name\":\"apple\",\"price\":3},"
        + "{\"name\":\"cherry\",\"price\":2}"
        + "]";

    JSONArray jsonArray = new JSONArray(jsonData);

    /** JSONArray -> List<JSONObject> **/
    List<JSONObject> jsonList = new ArrayList<>();
    for (int i = 0; i < jsonArray.length(); i++) {
      jsonList.add(jsonArray.getJSONObject(i));
    }

    /** 오름차순 정렬 **/
    jsonList.sort(Comparator.comparing(obj -> {
      try {
        return obj.getInt("price");
      } catch (JSONException e) {
        throw new RuntimeException(e);
      }
    }));

    /** 정렬된 List -> JSONArray로 변환 **/
    JSONArray sortedJsonArray = new JSONArray(jsonList);

    System.out.println("오름차순 정렬 JSONArray: " + sortedJsonArray);
    // 오름차순 정렬 JSONArray: [{"price":1,"name":"banana"},{"price":2,"name":"cherry"},{"price":3,"name":"apple"}]

    /** 내림차순 정렬 **/
    jsonList.sort(Comparator.comparing((JSONObject obj) -> {
      try {
        return obj.getInt("price");
      } catch (JSONException e) {
        throw new RuntimeException(e);
      }
    }).reversed());

    /** 정렬된 List -> JSONArray로 변환 **/
    JSONArray descSortedJsonArray = new JSONArray(jsonList);

    System.out.println("내림차순 정렬 JSONArray: " + descSortedJsonArray);
    // 내림차순 정렬 JSONArray: [{"price":3,"name":"apple"},{"price":2,"name":"cherry"},{"price":1,"name":"banana"}]
}

JSONArray도 바로 정렬할 수 없기 때문에 List에 담아서 처리해야합니다. 정렬할 때 정렬할 키를 기준으로 return해서 그 값을 정렬처리하게끔하면 됩니다.

반응형