Java调用Arrays.sort排序ArrayList<Person>提示无适配方法如何解决
错误原因
你调用了错误的排序API:
Arrays.sort()仅支持数组类型的入参,你传入的persons是ArrayList集合类型,触发了方法参数不匹配的报错。
修复方案
替换适配集合的排序方法
你可以选任意一种符合你JDK版本的写法:
- 通用写法(兼容所有JDK版本),使用
Collections.sort()处理集合:
import java.util.*; public class Main { public static void main(String[] args) { ArrayList<Person> persons = new ArrayList<>(); persons.add(new Person("Guillaume", 20)); persons.add(new Person("John", 50)); persons.add(new Person("Guillaume", 10)); persons.add(new Person("John", 10)); persons.add(new Person("Luc", 5)); System.out.println(persons.get(0).age); // 替换排序方法,同时实现你要的排序规则 Collections.sort(persons, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { // 先按姓名字典序排序 int nameCompare = o1.name.compareTo(o2.name); // 姓名相同则按年龄升序排序 if (nameCompare != 0) { return nameCompare; } return o1.age - o2.age; } }); System.out.println(persons); } } class Person { public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name + " " + age; } }
- JDK 8+简化写法,直接调用List自带的sort方法:
// 匿名内部类写法 persons.sort(new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { int nameCompare = o1.name.compareTo(o2.name); return nameCompare != 0 ? nameCompare : o1.age - o2.age; } }); // 还可以进一步简化为lambda写法 persons.sort((o1, o2) -> { int nameCompare = o1.name.compareTo(o2.name); return nameCompare != 0 ? nameCompare : o1.age - o2.age; });
运行结果
修改后输出将完全符合你的排序需求:
20 [Guillaume 10, Guillaume 20, John 10, John 50, Luc 5]
内容的提问来源于stack exchange,提问作者Sante Kyaku
相关产品推荐
相关产品推荐

