ordinare un arraylist di arraylist di numeri interi

Sto cercando di ordinare un arraylist di arraylist di numeri interi e ho bisogno di aiuto?

Mi è stato comunicato che ho bisogno di implementare un comparatore o simili, e quindi utilizzare la raccolta.ordina per ordinare l’elenco di un elenco in ordine…

ArrayList<ArrayList<Integer>> g = new ArrayList<ArrayList<Integer>>()

If you look at the list of list as the following example:
C1  5,4,10
C2  3,2,1
C3  7,8,6
First it will be sorted like this:
C1  4,5,10
C2  1,2,3
C3  6,7,8
Then it will be sorted like this
C1  1,2,3
C2  4,5,6
C3  7,8,10
fondamentalmente si desidera combinare tutte arraylist in una grande arraylist quindi ordinare e quindi assegnare di nuovo arraylist ?
Come si fa a definire l’ordine della lista di interi? cioè come si potrebbe costruire una lista prima di un altro? Sembra come ordinare le parole in un dizionario nel tuo esempio, ma voglio solo per assicurarsi.

OriginaleL’autore Ahmed Masud | 2012-05-29

3 Replies
  1. 15

    No errore check null, elenchi, ma qui è.

    List<List<Integer>> list = Arrays.asList(Arrays.asList(10, 5, 4), 
            Arrays.asList(3, 2, 1), Arrays.asList(7, 8, 6));
    for (List<Integer> l : list) {
        Collections.sort(l);
    }
    Collections.sort(list, new Comparator<List<Integer>>() {
        public int compare(List<Integer> o1, List<Integer> o2) {
            return o1.get(0).compareTo(o2.get(0));
        }
    });
    System.out.println(list);

    Con Java 8 e diventa ancora più conciso:

    List<List<Integer>> list = Arrays.asList(Arrays.asList(10, 5, 4),
                    Arrays.asList(3, 2, 1), Arrays.asList(7, 8, 6));
    list.forEach(Collections::sort);
    Collections.sort(list, (l1, l2) -> l1.get(0).compareTo(l2.get(0)));
    System.out.println(list);
    Javadoc sulle Collezioni.sort -> Implementation Note: This implementation defers to the List.sort(Comparator) method using the specified list and comparator.— suppongo che si potrebbe evitare questo reindirizzamento e utilizzare l.sort(null); e list.sort(new Comparator.... In altre, penso che si può scrivere tutto questo con la List oggetto, non c’è bisogno per Collections… non che sia importante…la leggibilità?
    Questo approccio funziona se l’interno ArrayLists sono di diversa lunghezza ?
    Anche perché il confronto solo i primi valori della lista? Che cosa succede se i primi termini sono uguali ?

    OriginaleL’autore

  2. 6

    Si può solo ordinare ogni individualmente. Il Collections.sort(collection) ordinare i numeri in ordine crescente automaticamente.

    OriginaleL’autore

  3. 1

    se l’ordinamento non ha che u bisogno di voi può provare questo algoritmo:

    package drawFramePackage;
    import java.awt.geom.AffineTransform;
    import java.util.ArrayList;
    import java.util.ListIterator;
    import java.util.Random;
    public class QuicksortAlgorithm {
        ArrayList<AffineTransform> affs;
        ListIterator<AffineTransform> li;
        Integer count, count2;
        /**
         * @param args
         */
        public static void main(String[] args) {
            new QuicksortAlgorithm();
        }
        public QuicksortAlgorithm(){
            count = new Integer(0);
            count2 = new Integer(1);
            affs = new ArrayList<AffineTransform>();
            for (int i = 0; i <= 128; i++){
                affs.add(new AffineTransform(1, 0, 0, 1, new Random().nextInt(1024), 0));
            }
            affs = arrangeNumbers(affs);
            printNumbers();
        }
        public ArrayList<AffineTransform> arrangeNumbers(ArrayList<AffineTransform> list){
            while (list.size() > 1 && count != list.size() - 1){
                if (list.get(count2).getTranslateX() > list.get(count).getTranslateX()){
                    list.add(count, list.get(count2));
                    list.remove(count2 + 1);
                }
                if (count2 == list.size() - 1){
                    count++;
                    count2 = count + 1;
                }
                else{
                count2++;
                }
            }
            return list;
        }
        public void printNumbers(){
            li = affs.listIterator();
            while (li.hasNext()){
                System.out.println(li.next());
            }
        }
    }

    OriginaleL’autore

Lascia un commento