sql >> Database >  >> RDS >> PostgreSQL

Hoe de items in de lijst overeenkomstig een bepaald patroon te herschikken?

Ik denk dat je het resultaat van de zoekopdracht in code opnieuw moet ordenen:

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

De eerste oplossing laat alle resultaten weg met een ID die niet voorkomt in de lijst met ID's.

De tweede oplossing met de comparator plaatst alle resultaten met onbekende ID's vooraan in de resultatenlijst.

Uitgang:

Opmerking:heb hier een vergelijkbare vraag gevonden:Sorteer een ( Array)Lijst met een specifieke bestelling Het heeft een redelijk antwoord met een TreeMap.



  1. Afbeeldingen die verschijnen in alle flacons behalve op 1 pagina

  2. Tabel1 bijwerken Van tabel 2

  3. Trigger maken die een uitzondering genereert bij invoegen

  4. NHibernate QueryOver en MYSQL