gpt4 book ai didi

java - 根据Java中另一个arraylist中的对象值对arraylist进行排序

转载 作者:行者123 更新时间:2023-11-30 10:18:50 25 4
gpt4 key购买 nike

我在对数组列表进行排序时遇到问题。在一个类中,我有两个不同对象的数组列表,我们可以调用对象 Foo 和 Bar。

public class Foo() {
int value;
//Some other fields, and setters and getters.
}

public class Bar() {
int id;
//Same here...
}

所以列表 fooList 可以完全被打乱。假设我有 16 个 Foos,但值为 5 的 Foo 可以在索引 13 上,依此类推。

我想要做的是命令 barList 在这些值之后匹配 fooList。如果值为 5 的 Foo 在索引 13 上,我希望值为 5 的 Bar 在索引 13 上。我最后一次尝试是这样的,但没有成功。

HashMap<Integer, Integer> positions = new HashMap<>();
for(int i=0;i<fooList.size();i++){
positions.put(foo.get(i).getValue, i);
}
Collections.sort(barList, new Comparator<Bar>(){
public int compare(Bar obj1, Bar obj2){
return positions.get(barList.indexOf(obj1)) -
positions.get(barList.indexOf(obj2));
}
});

有没有人知道如何以有效的方式做到这一点?

最佳答案

我不确定您为什么要使用 barList 中元素的索引来查看 map positions

这对你有帮助

Collections.sort(barList, new Comparator<Bar>() {
@Override
public int compare(Bar o1, Bar o2) {
return positions.get(o1.getId()) - positions.get(o2.getId());
}
});

这可以用一行代码简化

Collections.sort(barList, Comparator.comparingInt(bar -> positions.get(bar.getId())));

基本上,问题归结为:

给定两个整数列表 A = {a1, a2...an} 和 B = {b1, b2, ...bm},根据元素在第一个列表A中出现的位置对列表B进行排序.

对于B中的两个元素x,y

  • x > y,如果 x 在 A 中出现在 y 之前。
  • x < y,如果 x 出现在 A 中的 y 之后。
  • x = y,如果 x = y

因此,Bar 的比较器函数必须比较特定元素在 Foo 中出现的位置(基于上述)。

注意:这假设(如您所说)Bar没有元素 Foo 中不存在。 (Bar 中的元素是 Foo 中元素的子集)。

关于java - 根据Java中另一个arraylist中的对象值对arraylist进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com