java - java中自定义对象Arraylist的排序

标签 java comparator comparable

我有一个自定义对象假设 Team

public class Team{
    String      name;
    int         teamNo;
    ArrayList<Team> innerTeams;
    int teamId;

    //Getters and Setter Methods

现在我想按第一个属性的升序对其进行排序 name 考虑到每个 Team 对象本身有一个属性 Teamarraylist声明为innerTeams我怎样才能对此进行排序。所以最终当任何arrayList对象 Team存在,应该对其进行排序。

请任何人帮我解决这个问题。

最佳答案

最简单的方法是让您的 Team 类实现 Comparable。您可以调整 compareTo 内部的逻辑以满足您的需求,例如比较内部团队名称等。然后使用 Collections.sort() 进行实际排序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Team implements Comparable<Team> {

    String name;
    int teamNo;
    List<Team> innerTeams = new ArrayList<>();
    int teamId;

    @Override
    public int compareTo(Team o) {
        if(o == null) {
            return 1;
        } else if(name == null) {
            return 0;
        } else {
            return name.compareTo(o.name);
        }
    }

    public static void main(String[] args) {
        Team team1 = new Team();
        team1.name = "z";
        Team team2 = new Team();
        team2.name = "a";

        List<Team> teams = new ArrayList<>();
        teams.add(team1);
        teams.add(team2);

        System.out.println(teams);

        Collections.sort(teams);

        System.out.println(teams);
    }

    @Override
    public String toString() {
        return name;
    }
}

输出:

[z, a]
[a, z]

如果需要,您还可以使用相同的方法按名称对 innerTeams 进行排序。

关于java - java中自定义对象Arraylist的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46607833/

相关文章:

java - 链表的自定义迭代器

java - 总行数结果集 getRow 方法

java - 抽象类中的私有(private)构造函数

java - 使用 Weborb for Java 和 Flex 进行开发的典型开发工作流程/过程是什么?

java - 2 类,按降序排列到ArrayList中

priority-queue - Java优先级队列: How to ensure that new nodes are inserted first if natural order (compareTo) is the same?

java - 按映射值对字符串列表进行排序

Java:将比较器传递给我的 qsort 实现

java - 用于按浮点参数对对象数组列表进行排序的比较器

java - 通用二分搜索 - JAVA -