如何使用 Java 中的 Comparator 接口按名称对列表进行排序?
Comparator 接口可以用于对 用户自定义 类的对象进行排序。它可以比较两个不同类的对象。我们可以 对一个对象的列表进行排序,对于此列表,我们不能修改该对象的源代码以实现Comparable 接口。 lambda 表达式 不能单独执行,并且用于实现functional interface中声明的方法。
在下面的示例中,我们需要使用Comparator 接口和Stream API 在lambda 表达式的帮助下按名称对一个列表进行排序。
示例
import java.util.*; import java.util.function.*; import java.util.stream.*; public class ListSortByNameTest { public static void main(String[] args) { List<Person> arrayList = new ArrayList<Person>(); Person p = new Person(); p.setName("Adithya"); p.setAge(20); arrayList.add(p); Person p1 = new Person(); p1.setName("Jai"); p1.setAge(25); arrayList.add(p1); Person p2 = new Person(); p2.setName("Surya"); p2.setAge(33); arrayList.add(p2); Person p3 = new Person(); p3.setName("Ravi"); p3.setAge(35); arrayList.add(p3); Stream<Person> stream = arrayList.stream(); stream.forEach(x -> System.out.println("Name: [" + x.getName()+"] Age: ["+x.getAge()+"]")); Comparator<Stream> byPersonName = (Person p4, Person p5) -> p4.getName().compareTo(p5.getName()); Stream<Person> sorted = arrayList.stream().sorted(byPersonName); sorted.forEach(e -> System.out.println("Sorted Name: [" + e.getName()+"] Age: ["+e.getAge()+"]")); } } // Person class class Person { public String name; public int age; public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } }
输出
Name: [Adithya] Age: [20] Name: [Jai] Age: [25] Name: [Surya] Age: [33] Name: [Ravi] Age: [35] sorted Name: [Adithya] Age: [20] sorted Name: [Jai] Age: [25] sorted Name: [Ravi] Age: [35] sorted Name: [Surya] Age: [33]
广告