我要做的是将列表中的值从最大值排序到最小值。我正在尝试使用Collections.sort(mylist),但我不确定使用什么比较器来从最大到最小的排序。有关如何做到这一点的任何建议吗?
答案 0 :(得分:5)
你也可以这样做
Collections.sort(myList);
Collections.reverse(myList);
修改:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class A {
public static void main(String[] args) {
List<Integer> myList = new ArrayList<Integer>();
myList.add(5);
myList.add(1);
myList.add(3);
myList.add(2);
myList.add(9);
myList.add(15);
Collections.sort(myList);
Collections.reverse(myList);
System.out.println(myList);
}
}
答案 1 :(得分:3)
您的包含对象可能需要comparator,或者对象实现Comparable。 Collections.sort()然后会做你想做的事。
另请注意,您可能会导致结果上升,您可以使用Collections.reverse()反转结果,而不是创建新的比较器。
Npote也引用了方法到位并将影响您的原始列表。您可能希望创建一个新的排序列表(在这种情况下复制列表,然后对其进行排序)
(我现在看到你正在使用整数,以上适用于wrt。可比较)
答案 2 :(得分:3)
增加排序的比较器的公认标准是o1.intValue()-o2.intValue()
我们只是反过来说:
Comparator ourComparator=new Comparator<Integer>(){
public int compare(Integer o1, Integero2) {
return o2.intValue()-o1.intValue();
}
然后您可以执行以下操作:
Collections.sort(ourCollection, ourComparator);
反向操作仅适用于您的列表已经按升序排序,但由于您未指定类型,因此无法保证。
答案 3 :(得分:2)
您可以使用此代码按ID进行排序,例如:
public static class SceneComparator implements Comparator<Scene> {
@Override
public int compare(Chair sc, Chair scc) {
return (sc.getId() > scc.getId()) ? -1
: (sc.getId() < scc.getId()) ? 1 : 0;
}
}
List<Scene> scenes = myClass.getScenes();
Collections.sort(scenes, new ScenesComparator());
希望你发现它有用
干杯,
答案 4 :(得分:0)
这是简短而甜蜜的:
Integer[] numArray = {1, 2, 3, 4, 5, 0, 9, 8, 7, 6};
List<Integer> numList = new ArrayList<>(Arrays.asList(numArray));
Collections.sort(numList , Collections.reverseOrder());
输出:
[9,8,7,6,5,4,3,2,1,0]
答案 5 :(得分:0)
这是另一个干净的解决方案。
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class Solution {
public static void main(String[] args) {
List<Integer> lst = Arrays.asList(1, 6, 3, 8, 5, 9, 2, 7, 4);
lst.sort(Collections.reverseOrder());
System.out.println(lst);
}
}
输出
[9, 8, 7, 6, 5, 4, 3, 2, 1]