java - 使用对象 ID 列表的顺序对对象列表进行排序

标签 java list sorting

这就是我所拥有的:

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 相同的顺序对人员列表进行排序。

有没有更好的方法然后使用两个循环并创建一个新的人员列表?

问候&&蒂亚

黑色

最佳答案

使用自定义Comparator来使用Collections.sort,如下所示。比较器获取被比较人员的 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 都会出现在 ids 列表中。

关于java - 使用对象 ID 列表的顺序对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319088/

相关文章:

java - 使用包 exp4j 总是返回 UnknownFunctionExpression 和 UnparsableExpressionException

java - 如果 'get' 方法在线性探测中失败(如果其间存在空值)。如果不是,我该如何实现 get 方法?

java - 使用 jconsole 时 Java 转储堆文件的位置?

Java - 更改原始类型变量的值。可能的?

javascript - Sort(a,b) 在 Dojo.dnd.source 中不起作用

c# - 如何使用 List<string>.Sort 按长度对字符串列表进行排序?

java - 通过 JUnit 测试 Java 方法的执行时间和内存消耗

python - 如何按升序对整数列表进行排序?

java - 如何在Tapestry中为复杂类型创建bean编辑模型

javascript - JS sort() 空到结束