从最近到最远排序 Java 列表(使用多个键)
Sort Java List from closest to farthest (with multiple keys)
我希望对 Java 列表进行排序,相对于特定值从最近到最远。
例如:
名单:
{4,5,8,4,5,1,2,10,1,0,12}
为了比较哦,值 3 会变成:
{4,4,5,5,2,1,1,0,8,10,12}
因此,第一个值位于 1 到数字 3 的距离处,而第一个值位于数字 3 的距离 2 ...
我尝试了一个带有比较器的 ArrayList,但我不知道如何进行两个两个的比较。但也有树图距离,但键不必是唯一的。
我希望已经清楚了!
你有解决办法吗?
谢谢
通过创建自定义来尝试此解决方案 Comparator
:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = Arrays.asList(4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12);
System.out.println(list);
list.sort(new CustomComparator(3));
System.out.println(list);
}
}
class CustomComparator implements Comparator<Integer>
{
private int value;
public CustomComparator(int value)
{
this.value = value;
}
@Override
public int compare(Integer o1, Integer o2)
{
return Integer.compare(Math.abs(o1 - value), Math.abs(o2 - value));
}
}
输出是:
[4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12]
[4, 4, 2, 5, 5, 1, 1, 0, 8, 10, 12]
我会这样做
public class Main {
public static void main(String[] args) {
List<Integer> arr = Arrays.asList(4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12);
final int pivot = 3;
Collections.sort(arr, new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
int d1 = Math.abs(a - pivot);
int d2 = Math.abs(b - pivot);
return Integer.compare(d1, d2);
}
});
System.out.println(arr);
}
}
我希望对 Java 列表进行排序,相对于特定值从最近到最远。
例如:
名单:
{4,5,8,4,5,1,2,10,1,0,12}
为了比较哦,值 3 会变成:
{4,4,5,5,2,1,1,0,8,10,12}
因此,第一个值位于 1 到数字 3 的距离处,而第一个值位于数字 3 的距离 2 ...
我尝试了一个带有比较器的 ArrayList,但我不知道如何进行两个两个的比较。但也有树图距离,但键不必是唯一的。
我希望已经清楚了!
你有解决办法吗? 谢谢
通过创建自定义来尝试此解决方案 Comparator
:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = Arrays.asList(4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12);
System.out.println(list);
list.sort(new CustomComparator(3));
System.out.println(list);
}
}
class CustomComparator implements Comparator<Integer>
{
private int value;
public CustomComparator(int value)
{
this.value = value;
}
@Override
public int compare(Integer o1, Integer o2)
{
return Integer.compare(Math.abs(o1 - value), Math.abs(o2 - value));
}
}
输出是:
[4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12]
[4, 4, 2, 5, 5, 1, 1, 0, 8, 10, 12]
我会这样做
public class Main {
public static void main(String[] args) {
List<Integer> arr = Arrays.asList(4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12);
final int pivot = 3;
Collections.sort(arr, new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
int d1 = Math.abs(a - pivot);
int d2 = Math.abs(b - pivot);
return Integer.compare(d1, d2);
}
});
System.out.println(arr);
}
}