[英]How to sort one array based on another, when elements repeat, in Java?
我有两个 ArrayList
答:5 3 2 6 1 4
乙:0 1 2 0 3 2
我想根据 A 中的相应值对 B 进行排序,所以我应该得到:3 2 1 2 0 0
当我使用以下代码时:
ArrayList<Integer> D=new ArrayList<Integer>(B);
Collections.sort(B, Comparator.comparing(s -> A.get(D.indexOf(s))));
或者:
ArrayList<Integer> D = new ArrayList<Integer>(B);
Collections.sort(B, new Comparator<Integer>(){
public int compare(Integer a,Integer b){
return Integer.compare(A.get(D.indexOf(a)),A.get(D.indexOf(b)));
}
});
如果 B 中的元素是唯一的,它会起作用,但是由于 2 和 0 都有 2 次出现,所以每次A.get(D.indexOf(2))
时,都会返回 2 而永远不会返回 4。
所以我终于得到: 3 2 2 1 0 0
谁能帮我处理一个比较器来处理这个问题? 我不想做一个完整的排序算法,但也欢迎这样的解决方案。
一个简单的方法如下:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list1 = List.of(5, 3, 2, 6, 1, 4);
List<Integer> list2 = List.of(0, 1, 2, 0, 3, 2);
List<Integer> tempList = new ArrayList<>();
for (Integer i : list1) {
tempList.add(list2.get(i - 1));
}
System.out.println(tempList);
}
}
Output:
[3, 2, 1, 2, 0, 0]
[更新]
下面给出了一个更新的解决方案,以满足答案下方评论中提到的 OP 的新要求。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args){
List<Integer> list1 = List.of(15, 13, 12, 16, 11, 14);
List<Integer> list2 = List.of(0, 1, 2, 0, 3, 2);
List<Integer> tempList = new ArrayList<>();
int max = Collections.max(list1);
int offset = max - list2.size() + 1;
for (Integer i : list1) {
tempList.add(list2.get(i - offset));
}
System.out.println(tempList);
}
}
Output:
[3, 2, 1, 2, 0, 0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.