Java での特定条件に基づく優先ソート手法

標準的なデータ整列

Java 開発において、コレクションや配列の順序整理は頻繁に行われる処理です。通常、数値や文字列の自然順序に従って並べ替える場合は、標準ライブラリ提供的な機能を利用するのが効率的です。以下のコードでは、整数のリストを自然順序(昇順)でソートする基本的な実装を示しています。

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

public class StandardSortDemo {
    public static void main(String[] args) {
        List<Integer> dataSet = new ArrayList<>(Arrays.asList(15, 7, 22, 3, 9));
        
        dataSet.sort(Integer::compareTo);
        
        System.out.println("標準ソート結果:" + dataSet);
    }
}

この例では、List インターフェースが提供する sort メソッドを使用し、メソッド参照を通じて比較ロジックを渡しています。実行すると、数値が小さい順に並べられた結果がコンソールに出力されます。

特定要素の優先処理

ビジネスロジックによっては、特定の値をソート結果の先頭に固定したい場合があります。例えば、ステータスコード「0」を持つデータを最優先で表示したいようなケースです。これを実現するには、Comparator をカスタマイズして比較規則を定義します。

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;

public class PrioritySortDemo {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 0, 3, 0, 8));
        int targetValue = 0;

        numbers.sort(Comparator.comparingInt(val -> val.equals(targetValue) ? -1 : 1));

        System.out.println("優先ソート結果:" + numbers);
    }
}

上記の実装では、ラムダ式内で対象値との一致を判定しています。一致する場合は比較値として -1 を返し、それ以外は 1 を返すことで、対象要素がリストの先頭に来るように制御しています。

文字列リストへの応用

数値だけでなく、文字列データにおいても同様のロジックが適用可能です。例えば、都市名のリストにおいて「Tokyo」を常に先頭に表示したい場合、以下のような比較器を構築します。

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;

public class CityPrioritySort {
    public static void main(String[] args) {
        List<String> cities = new ArrayList<>(Arrays.asList("Osaka", "Tokyo", "Kyoto", "Nagoya"));
        String priorityCity = "Tokyo";

        cities.sort(Comparator.comparingInt(city -> city.equals(priorityCity) ? 0 : 1));

        System.out.println("都市ソート結果:" + cities);
    }
}

このアプローチにより、データの種類を問わず、特定のキーとなる要素を排序結果の最上位に配置する柔軟な仕組みを構築できます。

タグ: Java Collections Comparator lambda Sorting

7月16日 00:29 投稿