sql >> データベース >  >> RDS >> PostgreSQL

特定のパターンに従ってリスト内のアイテムを再配置するにはどうすればよいですか?

    クエリの結果をコードで並べ替える必要があると思います:

    public static void main(String[] args) {
    
        List<Integer> ids = Arrays.asList(5, 3, 2, 4, 1, 6);
        List<Foo> results = Arrays.asList(new Foo(1), new Foo(8), new Foo(2), new Foo(4), new Foo(5), new Foo(7));
    
        System.out.println("sortResults1: " + sortResults1(ids, results));
        System.out.println("sortResults2: " + sortResults2(ids, results));
    }
    
    private static List<Foo> sortResults1(List<Integer> ids, List<Foo> results) {
        Foo[] sortedResultsArray = new Foo[ids.size()];
        for (Foo result : results) {
            // look up the required position of this result's id 
            int pos = ids.indexOf(result.getId());
            if (pos >= 0) {
                sortedResultsArray[pos] = result;
            }
        }
        List<Foo> sortedResults = new ArrayList<>(Arrays.asList(sortedResultsArray));
        sortedResults.removeAll(Collections.singleton(null));
        return sortedResults;
    }
    
    private static List<Foo> sortResults2(List<Integer> ids, List<Foo> results) {
        Collections.sort(results, Comparator.comparingInt(item -> ids.indexOf(item.getId())));
        return results;
    }
    

    最初の解決策は、IDのリストにないIDの結果を省略します。

    コンパレータを使用した2番目のソリューションでは、IDが不明な結果を結果リストの先頭に配置します。

    出力:

    注:ここで同様の質問が見つかりました:並べ替え(配列)特定の順序でリスト TreeMapで妥当な答えがあります。



    1. OracleSQLの現在までの文字

    2. ORACLEへのアクセスからSELECTに挿入

    3. MySQLのテーブルと列の権限を付与する

    4. Oracle ORA-01031:ユーザーの作成中に権限が不十分です