1

これは私が持っているものです:

class Person {
  Integer id;
  String name;
}

// A list of persons:
List<Person> persons

// Now I have something like this:
List<Integer> ids  // where the ids are stored in an specific order

基本的には、IDと同じ順序で人物リストを並べ替えたいと思います。

2つのループのように使用して、新しいPerson-Listを作成するより良い方法はありますか?

&&tiaに関して

noircc

4

2 に答える 2

3

Collections.sort以下のようにカスタムして使用しComparatorます。コンパレーターは、比較対象の人物の ID を取得し、ID リストに表示される順序を決定します。

List<Person> persons = ...;
final List<Integer> ids = ...;

Collections.sort(persons, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        int index1 = ids.indexOf(p1.getId());
        int index2 = ids.indexOf(p2.getId());
        return index1 < index2 ? -1 : (index1 == index2 ? 0 : 1);
    }
});

注: このコードは、リスト内のすべての人物の ID が ID リストに表示されることを前提としています。

于 2012-04-25T16:05:58.043 に答える
-1
  1. idsそれぞれをそのインデックスにマップします: Map<Integer, Integer> idToIndex;
  2. 次のループを実行します。

for (int i = 0, size = persons.length - 1; i < size; ++i) {
  var targetIndex = idToIndex.get(persons.get(i).id);
  if (targetIndex != i) {
    persons[i] <-> persons[targetIndex];
  }
}
于 2012-04-25T15:53:22.413 に答える