Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでJSONObjectをソートする方法!値を降順に並べ替える実装例を解説

JSONObjectは、キーと値のペアからなる順序を持たない(unordered)コレクションです。格納できる値の型は、Boolean、JSONArray、JSONObject、Number、Stringなど多岐にわたります。JSONObjectのコンストラクタは、外部形式のJSONテキストを内部形式へ変換するために使用され、変換後の値はget()メソッドやopt()メソッドで取得できます。逆に、put()メソッドやtoString()メソッドを使えば、値をJSONテキスト形式へ変換することも可能です。

JSONObject自体は要素の順序を保持しないため、そのままではソートを行えません。そこで一般的なのが、キーと値を一旦リストなどのデータ構造に取り出し、Comparatorを使って並べ替えるというアプローチです。以下の例では、JSONObjectの値を降順にソートする方法を紹介します。

サンプルコード

import org.json.*;
import java.util.*;
public class JSonObjectSortingTest {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        try {
            JSONObject jsonObj = new JSONObject();
            jsonObj.put("Raja", 123);
            jsonObj.put("Jai", 789);
            jsonObj.put("Adithya", 456);
            jsonObj.put("Ravi", 111);
            Iterator<?> keys = jsonObj.keys();
            Student student;
            while(keys.hasNext()) {
                String key = (String) keys.next();
                student = new Student(key, jsonObj.optInt(key));
                list.add(student);
            }
            Collections.sort(list, new Comparator<Student>() {
                @Override
                public int compare(Student s1, Student s2) {
                    return Integer.compare(s2.pwd, s1.pwd);
                }
            });
            System.out.println("JSONObjectの値を降順で表示:");
            for(Student s : list) {
                System.out.println(s.pwd);
            }
        } catch(JSONException e) {
            e.printStackTrace();
        }
    }
}
// Studentクラス
class Student {
    String username;
    int pwd;
    Student(String username, int pwd) {
        this.username = username;
        this.pwd = pwd;
    }
}

実行結果

JSONObjectの値を降順で表示:
789
456
123
111

ポイント解説

  • keys()メソッドでJSONObject内のすべてのキーを取得し、optInt()メソッドで対応する数値を取り出して、独自のStudentオブジェクトとしてリストに追加しています。
  • Collections.sort()に匿名クラスのComparatorを渡すことで、並べ替えの基準を自由に定義できます。Integer.compare(s2.pwd, s1.pwd)のように引数の順序を逆にすると、降順になります。
  • もし昇順でソートしたい場合は、Integer.compare(s1.pwd, s2.pwd)と引数の順序を元に戻すだけで対応できます。
  • Java 8以降であれば、ラムダ式やMap.Entry.comparingByValue()などを活用することで、さらに簡潔に記述することも可能です。
  1. JavaでJComboBoxの項目をソートする方法!DefaultComboBoxModelのカスタマイズ例

    JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドと、ユーザーが値を選択できるドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーがコンボボックスを操作すると、ActionListener、ChangeListener、ItemListenerといったインターフェースを通じてイベントを受け取ることができます。 ただし、標準のJComboBoxにはアイテムを並べ替える(ソートする)機能は用意されていません。そこで本記事では、DefaultComboBoxModelクラスを継承した独自のモデルクラスを作成し、コンボボックスの項目を常に整序された

  2. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー