在 Java 中对对象数组进行排序
在本教程中,我们将学习如何使用 Java 中的 Comparable
接口和 Lambda
函数对对象数组进行排序。
在 Java 中使用 Comparable
对对象数组进行排序
Java 中的 Comparable
接口用于对用户定义的对象进行排序。在这里,Student
类实现了 Comparable
,因此我们可以使用 Arrays.sort()
对 Student
类对象的数组进行排序。
Student
类具有三个成员变量 name
、age
和 gender
。我们仅根据这些数据成员对元素进行排序。
Comparable 接口有一个方法,compareTo()
。正如我们在示例中看到的,Student
类已经实现了这个方法。
compareTo()
方法用于将当前对象与指定对象进行排序,如果当前对象大于当前对象,则返回一个正整数。当前对象小于指定对象时,返回负整数;如果返回零,则当前对象等价于指定对象。
我们创建了一个 Student
类对象的数组。我们将 name
、age
和 gender
作为参数传递,以使用类的默认构造函数初始化它们。
数组首先按 age
排序,然后是 name
,正如我们在 Student
类的 compareTo()
方法中看到的那样。我们将 students
数组传递给 Arrays.sort()
。
为了以我们的格式打印排序后的数组,我们重写了 Student
类中的 toString()
方法。
import java.util.Arrays;
class Student implements Comparable<Student> {
private String name;
private int age;
private String gender;
public Student (String name, int age, String gender){
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString()
{
return "{" + "name='" + name + '\'' +", gender: "+gender+", "+
"age=" + age + '}';
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
public String getName() {
return name;
}
@Override
public int compareTo(Student o) {
if (this.age != o.getAge()) {
return this.age - o.getAge();
}
return this.name.compareTo(o.getName());
}
}
public class TestExample {
public static void main(String [] args){
Student[] students = { new Student("Jack", 25,"male"), new Student("Sandy", 20,"female"),
new Student("Danny", 22,"male"), new Student("Zoey", 10,"female") };
Arrays.sort(students);
System.out.println(Arrays.toString(students));
}
}
输出:
[{name='Zoey', gender: female, age=10}, {name='Sandy', gender: female, age=20}, {name='Danny', gender: male, age=22}, {name='Jack', gender: male, age=25}]
使用 Lambda 对 Java 中的对象数组进行排序
使用 Java 8 中的 Lambda
函数对对象数组进行排序变得很容易,而无需实现 Comparable
接口。
在这里,我们有一个带有成员变量 bookName
和 author
的 Books
用户类。默认构造函数初始化这些数据成员。
访问这些成员的 getter 和 setter 方法也在 Book
类中定义。List
接口支持 sort()
方法。
这里,bookList
是包含 Books
类对象的列表实例。按作者对列表进行排序的 lambda 表达式是 (Books a , Books b) -> a.getAuthor().compareTo(b.getAuthor())
。
sort()
方法返回排序后的列表,我们遍历该列表并打印每个元素。排序后的列表打印在输出中。
import java.util.ArrayList;
import java.util.List;
class Books {
String bookName;
String author;
public Books(String bookName,String author){
this.bookName = bookName;
this.author = author;
}
@Override
public String toString()
{
return "{" + "Book ='" + bookName + '\''+
", author = '" + author + '\'' +"}";
}
public String getAuthor() {
return author;
}
public String getBookName() {
return bookName;
}
}
public class ExampleObjectSort {
public static void main(String [] args){
List<Books> bookList = new ArrayList<>();
bookList.add(new Books( "Barney's Version","Mordecai Richler" ));
bookList.add(new Books( "The Unsettlers","Mark Sundeen" ));
bookList.add(new Books( "The Debt to Pleasure","John Lanchester" ));
bookList.add(new Books( "How to Do Nothing","Jenny Odell" ));
System.out.println("Before Sorting");
bookList.forEach((s)->System.out.println(s));
System.out.println("");
System.out.println("Sorted Books by author Using Lambda.");
bookList.sort((Books a , Books b) -> a.getAuthor().compareTo(b.getAuthor()));
bookList.forEach((s)->System.out.println(s));
}
}
输出:
Before Sorting
{Book ='Barney's Version', author = 'Mordecai Richler'}
{Book ='The Unsettlers', author = 'Mark Sundeen'}
{Book ='The Debt to Pleasure', author = 'John Lanchester'}
{Book ='How to Do Nothing', author = 'Jenny Odell'}
Sorted Books by author Using Lambda.
{Book ='How to Do Nothing', author = 'Jenny Odell'}
{Book ='The Debt to Pleasure', author = 'John Lanchester'}
{Book ='The Unsettlers', author = 'Mark Sundeen'}
{Book ='Barney's Version', author = 'Mordecai Richler'}
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn相关文章 - Java Array
- 如何在 Java 中连接两个数组
- 如何在 Java 中以十六进制字符串转换字节数组
- 用 Java 从数组中删除重复项
- 在 Java 中对数组进行切片
- 在 Java 中不使用 sort() 方法对数组进行排序
- Java 中的列表与数组