Gespeichertes Array ordnen

Hi Leute,

wie kann man den Inhalt eines Object[] umordnen?
Ich habe in einem Array Namen von DB Tabellen gespeichert und möchte die Namen umordnen, anhand des Felds Priorität, dass jede Tabelle hat und durchgängig gleich ist(pro Tabelle).
Ich habe eine DB Anfrage gemacht, die mir die Pioritäten anzeigt:

        Object[][] list = null; 
        
        try {
            int listSize = 0;
            Object[] choices = managerAlg.getChoosedMod();
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url + "modules"  , user, pass);
            stmt = (Statement) con.createStatement();

            res =  (ResultSet) stmt.executeQuery( "SELECT " +  this.createSelectString() + " " +
                                                  "FROM " + this.createFromString() + " " + 
                                                            this.createWhereString() + " " );
            while (res.next()) {
                listSize++;
            }
            res.first();
            
            int listWidth = choices.length +1;
            if (listSize > 0) {
                list = new Object[listSize][listWidth];
                
                for (int j = 0; j < listSize; j++) {
                    list[j][0] = res.getString("TaskCommonDim");
                    
                    for (int i = 1; i < listWidth; i++) {
                        list[j]** = res.getString(choices[i-1] + ".Piority");

                    }

                }
            }
            
            
            con.close();
           
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println(list);    
        return list;
    }```

Wie könnte man vorgehen?

Ich würde sagen, du regelst das mit dem Sortieren gleich im SQL-Statement mit ORDER BY :wink:

Hi,
ich muss das wirklich auf dieser Weise machen, da ich in einer anderen Klasse aus den einzelnen Tabellen Start und End-Zeiten ziehe und anhand des Arrays:
Object[] choices = managerAlg.getChoosedMod();
werden die For-Schleifen bedient! Hier wird dann Dauer berechnet. Es wir zunächst die mindest StartZeit bestimmt und dann weitergerechnet.
[SQL]ID Tabelle1 Tabelle2
D68D6B13-6385-4DD7-B0C4-13B04CD353F8 |06:25:30 - 06:45:30 |06:45:30 - 06:52:30
A40326B4-94EA-4CF2-846B-5DA4DB94EA21 |06:52:30 - 07:22:30 |07:22:30 - 07:42:30
94CF5424-7DC9-4DDC-8812-C9363417BA43 |07:42:30 - 07:59:30 |07:59:30 - 08:19:30
4863A15B-7F3D-45CC-B1E0-3AAFA2BD62B5 |08:19:30 - 08:36:30 |08:36:30 - 08:55:30
2D97A2AA-53F5-4A9E-BF10-69E2B8C17BA6 |08:55:30 - 09:00:30 |09:00:30 - 09:16:30
E8DB768B-2E08-4C33-A6C8-60F3A7FB2697 |09:16:30 - 09:21:30 |09:21:30 - 09:36:30[/SQL]
Ich wollte nun schon im Array vorsortieren, damit die Spalten der Tabelle schon je nach Prio stehen. Und natürlich Zwecks weiterer Berechnungen.
Hat jemand ne Idee? Bitte!!

wenn die Elemente in dem Array eine natuerlich Reihenfolge haben kannst du einfach
http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#sort(java.lang.Object[])nutzen

haben sie das nicht oder du willst sie nach ganz bestimmten Kriterien sortieren kannst du
http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator)
nutzen

edit… das board verhaut leider die links durch die [ ]

Edit: Doch, das geht, in dem du API-Links mit url-Tags umgibst.
*Links repariert

LeX

Hi,

leider konnte ich unter den beiden Links nichts finden:

JDK 21 Documentation - Home)

JDK 21 Documentation - Home

da kam Page not found! Auch ohne der Klammer!
Was hab ich falsch gemacht?

du nix… die foren koennen net mit den links umgehen

http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#sort(java.lang.Object[])
http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator)

Edit: *Links repariert

LeX

Hi,
ich danke Dir, aber verstehe den Umgang damit nicht!

Ich habe ein Object[] as beinhaltet irgendwelche Tabellennamen: z.B. m1,m2,m3
und ein Object[], dass deren Prioritäten anzeigt: z.B. 3,2,1.
Nun möchte ich das der erste Object[] sich nach den Nummern sortiert, so dass m3,m2,m1 herauskommt!

}```

Da steht a sei der zu ordneter Array und muss ich c erst implementieren?:confused:

Guck mal hier

http://www.java-blog-buch.de/d-objekte-sortieren-comparator-und-comparable/

Die Vorlage ist Super! Aber wie ich es auf meinem Problem adaptieren kann ist mir noch ein kleines Rätsel!
Ich muß meine beiden Arrays irgendwie in dies Template Klasse einbauen. Aber wie?
Ich hab das so gemacht:

    private AlgorithmManagement managerAlg;
    private Object[] name = managerAlg.getChoosedMod();
    private int[] list = managerAlg.getPiorityData().getModulesPrio();
   
    public PioModTemplate(Object[] name, int[] list) {
        this.name = name;
        this.list =list;
    }

    public Object[] getModules() {
        return this.name;
    }
   
    public int[] getPrio() {
        return this.list;
    }
 
}```

Aber mein Ergebnis soll ja ein Array sein, dass mir ein geordnetes getModules() nach der nummerischen Ordnung von getPrio() ausgibt.
Ich verstehe nicht wie ich dann aus dem obigen meine compare-Methode bauen soll(wenn die Template Klasse in Ordnung wäre!).
Würde mich über jeden Tipp freuen!

Mit diesem Template kann ich jetzt nicht so viel anfangen … :confused:

Aber in Anlehnung an

Ich habe ein Object as beinhaltet irgendwelche Tabellennamen: z.B. m1,m2,m3
und ein Object, dass deren Prioritäten anzeigt: z.B. 3,2,1.
Nun möchte ich das der erste Object sich nach den Nummern sortiert, so dass m3,m2,m1 herauskommt!

gehe ich davon aus, dass du einen Array mit Objekten hast, und einen Array mit Prioritäten, und die Objekte nach den Prioritäten geordnet werden sollen?!

Wenn’s das war, könnte das ungefähr so gehen:

import java.util.*;

class PrioSortTest
{
    public static void main(String args[])
    {
        Object names[] = new Object[] { "m1", "m2", "m3" };
        int priorities[] = new int[] { 2, 1, 3 };

        System.out.println("Input: ");
        System.out.println(Arrays.toString(names));

        sort(names, priorities);

        System.out.println("Sorted: ");
        System.out.println(Arrays.toString(names));
    }



    private static void sort(Object objects[], int priorities[])
    {
        class PrioObject
        {
            Object object;
            int priority;
        }
        List<PrioObject> list = new ArrayList<PrioObject>();
        for (int i=0; i<objects.length; i++)
        {
            PrioObject ps = new PrioObject();
            ps.object = objects**;
            ps.priority = priorities**;
            list.add(ps);
        }

        Collections.sort(list, new Comparator<PrioObject>()
        {
            public int compare(PrioObject a, PrioObject b)
            {
                return a.priority - b.priority;
            }
        });
        for (int i=0; i<objects.length; i++)
        {
            PrioObject ps = list.get(i);
            objects** = ps.object;
        }
    }
}

Vielen Dank! Mein Problem ist nur noch folgendes:
Die Beiden Arrays

int priorities[] = new int[] { 2, 1, 3 };```
werden von mir ausgelesen. Das erstere aus einer ini-Darei und das zweite durch eine DB Anfrage. 
Wie kann ich ein "new" Anweisung aus vorhandenen Arrays machen?:confused:

Das mit den “geschweiften Klammern” geht nur einmalig beim Initialisieren. Ansonsten musst du auf gewöhnliche Weise über die Indices auf dein Array zugreifen.

Klar bin war gestern zu müde!:twisted: