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()などを活用することで、さらに簡潔に記述することも可能です。
-
JavaでJComboBoxの項目をソートする方法!DefaultComboBoxModelのカスタマイズ例
JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドと、ユーザーが値を選択できるドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーがコンボボックスを操作すると、ActionListener、ChangeListener、ItemListenerといったインターフェースを通じてイベントを受け取ることができます。 ただし、標準のJComboBoxにはアイテムを並べ替える(ソートする)機能は用意されていません。そこで本記事では、DefaultComboBoxModelクラスを継承した独自のモデルクラスを作成し、コンボボックスの項目を常に整序された
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー