首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据另一个对象的列表比较和重新排序对象的ArrayList?

如何根据另一个对象的列表比较和重新排序对象的ArrayList?
EN

Stack Overflow用户
提问于 2015-05-18 16:02:18
回答 3查看 127关注 0票数 1

我有两个数组,一个类型为String,另一个是自定义类Person。

代码语言:javascript
运行
复制
List names = new ArrayList<String>(); 
List people = new ArrayList<Person>();

这两个列表都是这样填充的:

代码语言:javascript
运行
复制
names.add("bob");
names.add("joe");
names.add("tom");
people.add(new Person("joe")); //Assuming Person has a name property
people.add(new Person("tom"));
people.add(new Person("bob"));

请注意,在两个列表中都使用了相同的名称,但按不同的顺序添加。如何按照与people相同的顺序对names数组进行排序

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-18 16:10:46

奇怪的需求,但您可以通过使用Map来完成

代码语言:javascript
运行
复制
Map<String, Person> personMap = new HashMap<>();
//Assuming people is declared rightfully as List<Person> rather than just List
for (Person people : people) {
    personMap.put(person.getName(), person);
}
List<Person> results = new ArrayList<>();
for (String name : names) {
    if (personMap.containsKey(name)) {
        results.add(personMap.get(name));
    }
}
//in case you need to work with people only
people.clear();
people.addAll(results);
票数 3
EN

Stack Overflow用户

发布于 2015-05-18 16:11:31

由于names数组显然可以按任意顺序排列,所以“排序”的概念并不适用。我认为,最直接的方法是使用映射从给定的people数组重新构建names数组。像这样的东西可能会起作用:

代码语言:javascript
运行
复制
void reoderPeople(ArrayList<Person> people, ArrayList<String> names) {
    // first build the map
    Map<String, Person> map = new HashMap<>();
    for (Person p : people) {
        map.add(p.getName(), p);
    }
    // now re-create the people array
    people.clear();
    for (String name : names) {
        people.add(map.get(name));
    }
}

这假设基于名称在namespeople元素之间存在一对一的对应关系。如果这不是一个正确的假设,那么这个方法就必须进行相应的修改。

票数 2
EN

Stack Overflow用户

发布于 2015-05-18 16:09:35

使用比较器对人进行排序,使用名称列表的排序。(下面是未经测试的代码)

代码语言:javascript
运行
复制
Collections.sort(people, new Comparator<Person>(){
  public int comapre(Person a, Person b) {
    Integer indexA = names.indexOf(a.getName());
    Integer indexB = names.indexOf(b.getName());
    return indexA.compareTo(indexB);
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30307918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档