在 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 中的列表與陣列