在ArrayList中排序条目

时间:2013-03-27 19:18:31

标签: java sorting collections

ArrayList<ArrayList<Double>> selected中存储了5个条目。这些条目中的每一个都由两个参数指定 - rankcd

rank = [1.0, 2.0, 3.1, 1.2, 2.1]
cd = [6.2, 5.2, 7.1, 8.0, 1.1]

我需要按rank排序首先,然后按<{1}}按 排序<(1)}(即3.1,2.1) ,2.0,1.2,1.1)。第二个排序(按cd)必须应用于cd已订购的条目。

rank

问题是我不知道在订购之前如何获取已分配给条目的ID。例如,这是ID的无序序列:1,2,3,4,5,这是订购后的ID序列:5,3,4,1,2。如何获取这些ID?

1 个答案:

答案 0 :(得分:0)

这就是我接近它的方式......

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class SortPairs {

    public static void main(String[] args) {
        List<Double> rank = new ArrayList<Double>(Arrays.asList(1.0, 2.0, 3.1, 1.2, 2.1)); 
        List<Double> cd = new ArrayList<Double>(Arrays.asList(6.2, 5.2, 7.1, 8.0, 1.1));

        List<Pair<Double, Double>> pairs = new ArrayList<Pair<Double, Double>>(rank.size());
        for (int i = 0; i < rank.size(); ++i)
            pairs.add(new Pair<Double, Double>(rank.get(i), cd.get(i)));

        Collections.sort(pairs);

        ListIterator<Double> rankIter = rank.listIterator();
        ListIterator<Double> cdIter = cd.listIterator();
        for (Pair<Double, Double> pair : pairs) {
            System.out.println(String.format("[rank = %.1f, cd = %.1f", pair.getT1(), pair.getT2()));
            rankIter.next();
            cdIter.next();
            rankIter.set(pair.getT1());
            cdIter.set(pair.getT2());
        }
    }

   public static class Pair <T1 extends Comparable<? super T1>, T2 extends Comparable<? super T2>> implements Comparable<Pair<T1, T2>> {
      private final T1 t1;
      private final T2 t2;

      public Pair(T1 t1, T2 t2) {
         this.t1 = t1;
         this.t2 = t2;
      }

      public T1 getT1() {
          return t1;
      }

      public T2 getT2() {
          return t2;
      }

      @Override
      public int compareTo(Pair<T1, T2> other) {
          return t1.equals(other.t1) ?
                 other.t2.compareTo(t2) : 
                 other.t1.compareTo(t1);
      }
   }
}