一、自然排序
自然排序是按照对象的自然顺序进行排序,例如数字的大小或字符串的字典序。对于实现了 comparable 接口的类,可以直接使用 collections.sort() 或 list.sort() 方法进行排序。
import java.util.arraylist;
import java.util.collections;
import java.util.list;
public class naturalsortexample {
public static void main(string[] args) {
list<integer> numbers = new arraylist<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);
// 使用 collections.sort() 排序
collections.sort(numbers);
system.out.println("排序后的数字列表: " + numbers);
list<string> words = new arraylist<>();
words.add("apple");
words.add("banana");
words.add("cherry");
// 使用 list.sort() 排序
words.sort(null);
system.out.println("排序后的单词列表: " + words);
}
}
二、自定义排序规则
当需要按照特定规则排序时,可以实现 comparator 接口来自定义排序规则。
import java.util.arraylist;
import java.util.collections;
import java.util.comparator;
import java.util.list;
public class customsortexample {
public static void main(string[] args) {
list<person> people = new arraylist<>();
people.add(new person("alice", 30));
people.add(new person("bob", 25));
people.add(new person("charlie", 35));
// 按年龄升序排序
collections.sort(people, new comparator<person>() {
@override
public int compare(person p1, person p2) {
return integer.compare(p1.getage(), p2.getage());
}
});
system.out.println("按年龄升序排序:");
for (person person : people) {
system.out.println(person);
}
// 按年龄降序排序
collections.sort(people, new comparator<person>() {
@override
public int compare(person p1, person p2) {
return integer.compare(p2.getage(), p1.getage());
}
});
system.out.println("按年龄降序排序:");
for (person person : people) {
system.out.println(person);
}
}
}
class person {
private string name;
private int age;
public person(string name, int age) {
this.name = name;
this.age = age;
}
public string getname() {
return name;
}
public int getage() {
return age;
}
@override
public string tostring() {
return "person{name='" + name + "', age=" + age + '}';
}
}
三、使用 lambda 表达式简化 comparator
从 java 8 开始,可以使用 lambda 表达式来简化 comparator 的实现。
import java.util.arraylist;
import java.util.collections;
import java.util.comparator;
import java.util.list;
public class lambdasortexample {
public static void main(string[] args) {
list<person> people = new arraylist<>();
people.add(new person("alice", 30));
people.add(new person("bob", 25));
people.add(new person("charlie", 35));
// 使用 lambda 表达式按年龄升序排序
people.sort((p1, p2) -> integer.compare(p1.getage(), p2.getage()));
system.out.println("按年龄升序排序:");
people.foreach(system.out::println);
// 使用 lambda 表达式按年龄降序排序
people.sort((p1, p2) -> integer.compare(p2.getage(), p1.getage()));
system.out.println("按年龄降序排序:");
people.foreach(system.out::println);
}
}
class person {
private string name;
private int age;
public person(string name, int age) {
this.name = name;
this.age = age;
}
public string getname() {
return name;
}
public int getage() {
return age;
}
@override
public string tostring() {
return "person{name='" + name + "', age=" + age + '}';
}
}
四、多条件排序
可以结合多个条件进行排序,例如先按年龄排序,再按姓名排序。
import java.util.arraylist;
import java.util.comparator;
import java.util.list;
public class multiconditionsortexample {
public static void main(string[] args) {
list<person> people = new arraylist<>();
people.add(new person("alice", 30));
people.add(new person("bob", 25));
people.add(new person("charlie", 30));
people.add(new person("david", 25));
// 按年龄升序,年龄相同则按姓名字典序排序
people.sort(comparator.comparingint(person::getage)
.thencomparing(person::getname));
system.out.println("按年龄升序,年龄相同按姓名排序:");
people.foreach(system.out::println);
}
}
class person {
private string name;
private int age;
public person(string name, int age) {
this.name = name;
this.age = age;
}
public string getname() {
return name;
}
public int getage() {
return age;
}
@override
public string tostring() {
return "person{name='" + name + "', age=" + age + '}';
}
}
五、总结
java 提供了多种方式对 list 进行排序,包括自然排序和自定义排序。通过实现 comparable 接口或使用 comparator,可以灵活地定义排序规则。java 8 的 lambda 表达式进一步简化了排序代码,使代码更加简洁易读。
到此这篇关于java list排序的文章就介绍到这了,更多相关java list 排序内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论