java - 按对象中的不同参数对 ArrayList 进行排序

标签 java sorting object arraylist

<分区>

我有一个类“Person”,它包含一个带有 3 个参数的构造函数。 现在我想要一个排序选项,我需要它按 ID、名称或地址升序和降序排序

public class Person
{
private int id;
private String name;
private String addr;


public Person()
{
    id = MyTools.getInteger("ID: ");
    name = MyTools.getString("Name: ");
    addr = MyTools.getString("Address: ");

}

这里是我要排序的地方:

public static void main(String[] args) throws FileNotFoundException
{
    boolean loop = true;

    System.out.println("Choose:");
    System.out.println("\t" + "0 = Exit programm");
    System.out.println("\t" + "1 = Add new");
    System.out.println("\t" + "2 = Show");
    System.out.println("\t" + "3 = Sort");
    System.out.println("\t" + "4 = Delete");
    System.out.println("\t" + "5 = Save");
    System.out.println("\t" + "6 = Help");

    TextFile tf = new TextFile("AdressVerwaltung.txt", 'o');
    List<Person> adressen = new ArrayList<Person>();
    int listSize = 0;
    while (loop)
    {

int choice = MyTools.getInteger("Please choose which operation you want 
to execute (6 = Help): "+"\n");

    switch (choice)
    {
        case 0:
        System.out.println("Programmende");         
        for (int k = 0; k < listSize; k++)
        {
            tf.printLine(adressen.get(k).toString());
        }
        tf.close();
        loop = false;
        break;

      case 1:


  Person p = new Person();
  adressen.add(p);
  System.out.println("Data is put in Array!");
  listSize = adressen.size();

break;
case 2:

break;
case 3: 
break;

现在我希望能够选择是按 ID、按名称还是按地址排序

最佳答案

您可以使用 Java 中的 Comparator 接口(interface)来创建一些自定义比较器:

例如用户对象:

public class User {
    private final String username;
    private final Integer age;

    public User(String username, Integer age) {
        this.username = username;
        this.age = age;
    }

    public String getUsername() {
        return username;
    }

    public Integer getAge() {
        return age;
    }
 }

按用户名排序的示例比较器:

public class UsernameComparator implements Comparator<User> {
    @Override
    public int compare(User user, User user2) {
        return user.getUsername().compareTo(user2.getUsername());
    }
}

并使用:

    List<User> users = asList(
        new User("Michael", 34),
        new User("John", 30),
        new User("James", 30),
        new User("Mark", 29));

UsernameComparator userNameComparator = new UsernameComparator();
users.sort(userAgeComparator);

或使用 Collections.sort(.....):

Collections.sort(users, userAgeComparator);

或者使用 java 8 的流 API,您可以避免创建新的 Comparator 类,而只需使用流和排序方法:

    List sortedList = users.stream()
            .sorted(Comparator.comparing(User::getUsername))
            .collect(Collectors.toList());

祝你好运:-)

关于java - 按对象中的不同参数对 ArrayList 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56888700/

相关文章:

java - 在父类(super class)构造函数中指定哪个子类

python - 我可以在 Python 中按数值对文本进行排序吗?

python - 在 Python 中排序的最快方法

javascript - 无法获取对象属性值

javascript - 检查合并的数组是否包含来自两个数组的项目并更新合并的数组 JS

java - Gradle jetty使用DropWizard运行set webappsource目录

java ant Eclipse 运行报错

java - 速度。无法加载我的资源

c - 有效地对结构数组进行排序

class - 为什么 Scala 包对象中的类不受欢迎?