JAVA-如何按对象元素对ArrayList排序?

JAVA-如何按对象元素对ArrayList排序?,java,sorting,generics,arraylist,Java,Sorting,Generics,Arraylist,我编写了一个工作方法,将对象插入SorterDarrayList类中的ArrayList中。问题是,它按ArrayList第一个元素的第一个字母排序 我希望能够选择ArrayList的排序方式(例如,根据姓氏的第一个字母或用户对象中的书籍数量。我如何处理 存储的对象类型示例:User(字符串firstName、字符串姓氏、int books) import java.io.*; 导入java.util.Scanner; 公务舱司机{ //这些SortedArrayList是从sorted arr

我编写了一个工作方法,将对象插入SorterDarrayList类中的ArrayList中。问题是,它按ArrayList第一个元素的第一个字母排序

我希望能够选择ArrayList的排序方式(例如,根据姓氏的第一个字母或用户对象中的书籍数量。我如何处理

存储的对象类型示例:User(字符串firstName、字符串姓氏、int books)

import java.io.*;
导入java.util.Scanner;
公务舱司机{
//这些SortedArrayList是从sorted arraylist类派生的
公共静态分拣机DarrayList sortedUsers=新分拣机DarrayList();
公共静态SorterRayList sortedBooks=新SorterRayList();
//此静态方法检查输入是否与记录匹配,然后设置贷款用户信息
//对于要借出的书籍,同时增加用户持有的书籍数量。
公共静态无效借书簿(书簿,用户){
(b册:分类图书){
如果(b等于(账面)){
b、 setLoanStatus(真);
b、 setLoaningUser(用户);
打破
}
}
用于(用户u:分拣机){
如果(u.equals(用户)){
u、 setNumberOfBooks(u.getNumberOfBooks()+1);//找到给定对象的图书数量,然后增加1以创建新值,该值已设置
打破
}
}
}
//此静态方法检查输入是否与记录匹配,并清除贷款用户信息
//对于要借出的图书,同时将用户持有的图书数量减少1。
公共静态无效返回书(书簿,用户){
(b册:分类图书){
如果(b等于(账面)){
b、 setLoanStatus(假);
b、 setLoaningUser(空);
打破
}
}
用于(用户u:分拣机){
如果(u.equals(用户)){
u、 setNumberOfBooks(u.getNumberOfBooks()-1);
//问题用户的对象实例的书籍数量减少,因为他们返回了一本书,因此少了一本书。
}
}
}
//这是程序启动的主要方法。
公共静态void main(字符串[]args)引发FileNotFoundException,User.InvalidBookLimitException{
}
mainMenu();//主菜单打印方法
char ch=sc.next().charAt(0);
sc.nextLine();
while(ch!='f')//如果按f键,程序将根据需要结束
{开关(ch){
案例“b”:
System.out.println(“显示图书馆中所有书籍的信息:”);
//此toString replace方法删除不需要的项目以更清晰地打印图书对象信息,并删除user toString方法中描述的用户名的字符串描述。
System.out.println(sortedBooks.toString().replace(“[”,”).replace(“]”,”).replace(“名称:”,”);
打破
案例“u”:
System.out.println(“显示所有用户的信息”);
System.out.println(sortedUsers.toString().replace(“[”,”).replace(“]”,”);
打破
案例“i”:
System.out.println(“输入贷款数据”);
User=readNames();
Book Book=readBookName();
//根据用户输入创建book对象,然后尝试更改
//通过loanBook方法生成相关对象信息。
借书(书、用户);
打破
案例“r”:
System.out.println(“请提供待归还图书的详细信息:”;
用户userReturn=readNames();
Book bookReturn=readBookName();
//用户输入用于创建用户和书本对象,以便可以返回书本
//通过使用returnBook方法,重置有关书籍的任何用户信息,并减少用户持有的书籍数量的计数。
returnBook(bookReturn、userReturn);
打破
default://如果输入与任何switch语句情况不匹配,则会发生这种情况。
System.out.println(“无效输入,请输入f、b、i或r”);
}
主菜单();
ch=sc.next().charAt(0);
sc.nextLine();
}
}
}
分类列表类: 导入java.util.ArrayList

public class SortedArrayList<E extends Comparable<E>> extends ArrayList<E> {

    //This insert method ensures that an object added to an arraylist is added in a sorted order.
    public void insert(E value) {
        if (this.size() == 0){
            this.add(value);
            return; }
        for (int i = 0; i < this.size(); i++) {
            int comparison = value.compareTo((E) this.get(i) );
            if (comparison < 0) {
                this.add(i, value);
                return; }
            if (comparison == 0){
                return; }
        }
        this.add(value);
    }
公共类SorterDarrayList扩展了ArrayList{
//此插入方法确保按排序顺序添加添加到arraylist的对象。
公共空白插入(E值){
if(this.size()==0){
增加(价值);
返回;}
对于(int i=0;i
您只需使用常规的ArrayList(或任何类型的内置列表),并在添加所有元素后,使用
Collections.sort()
。 在这里,您可以将列表作为第一个参数,将自定义比较器作为第二个参数。对于自定义比较器,您可以提供所需的比较(姓氏等)。 这种排序也比您当前使用的更有效


以下是JavaDoc:

您可以简单地使用常规的ArrayList(或任何类型的内置列表),并且在添加所有元素后,使用
Collections.sort()
。 在这里,您可以将列表作为第一个参数,将自定义比较器作为第二个参数。对于自定义比较器,您可以提供所需的比较(姓氏et
public class SortedArrayList<E extends Comparable<E>> extends ArrayList<E> {

    //This insert method ensures that an object added to an arraylist is added in a sorted order.
    public void insert(E value) {
        if (this.size() == 0){
            this.add(value);
            return; }
        for (int i = 0; i < this.size(); i++) {
            int comparison = value.compareTo((E) this.get(i) );
            if (comparison < 0) {
                this.add(i, value);
                return; }
            if (comparison == 0){
                return; }
        }
        this.add(value);
    }