PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przestawić pozycje na liście zgodnie z danym wzorem?

Myślę, że musisz zmienić kolejność wyniku zapytania w kodzie:

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

Pierwsze rozwiązanie pomija wszelkie wyniki z identyfikatorem, który nie występuje na liście identyfikatorów.

Drugie rozwiązanie z komparatorem umieszcza wszelkie wyniki z nieznanymi identyfikatorami na początku listy wyników.

Wyjście:

Uwaga:znaleziono podobne pytanie tutaj:Sortuj ( Array)Lista z określoną kolejnością Ma rozsądną odpowiedź z TreeMap.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwracanie wartości nienumerycznych z kolumny bazy danych PostgreSQL

  2. Wartość Auto-Incremented nie działa w PostgreSQL podczas korzystania z EntityFramework Core

  3. Sprawdź, czy istnieje powiązanie bez ponoszenia trafienia do bazy danych

  4. Używanie Django ORM w wątkach i unikanie wyjątków zbyt wielu klientów za pomocą BoundedSemaphore

  5. Przenoszenie klastra danych postgresql