【问题标题】:Sort ArrayList by diffrent parameters which are in an object [duplicate]按对象中的不同参数对ArrayList进行排序[重复]
【发布时间】:2019-11-15 05:46:18
【问题描述】:

我有一个类“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、按名称还是按地址排序

【问题讨论】:

  • 了解Comparator接口

标签: java sorting object arraylist


【解决方案1】:

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

例如一个用户对象:

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());

祝你好运:-)

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 2020-01-12
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多