PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie ordnet man Elemente in der Liste entsprechend einem bestimmten Muster neu an?

Ich denke, Sie müssen das Ergebnis der Abfrage im Code neu anordnen:

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;
}

Die erste Lösung lässt alle Ergebnisse mit einer ID aus, die nicht in der Liste der IDs vorkommt.

Die zweite Lösung mit dem Komparator stellt alle Ergebnisse mit unbekannten IDs an den Anfang der Ergebnisliste.

Ausgabe:

Hinweis:Hier wurde eine ähnliche Frage gefunden:Sort an ( Array)Liste mit einer bestimmten Reihenfolge Es hat eine vernünftige Antwort mit einer TreeMap.