How to sort Arraylist of objects

前端 未结 3 1301
星月不相逢
星月不相逢 2020-12-03 05:42

I have ArrayList, which containst football teams (class Team). Teams have points and i want to sort them by number of points.

 public class Team {
     priva         


        
相关标签:
3条回答
  • 2020-12-03 06:06

    It is not actually necessary to define a custom Comparator like this.

    Instead, you can easily define one, when you want to sort your ArrayList.

    Since JAVA 8 using lamda

        // Sort version.
        Iteams.sort(Comparator.comparing(Team::getPoints));
    
        // Complete version.
        Iteams.sort((o1, o2) -> o1.getPoints().compareTo(o2.getPoints()));
    


    Also there are options for second comparator, if objects are equals on the first:

        // e.g. if same points, then compare their names.
        Iteams.sort(Comparator.comparing(Team::getPoints).thenComparing(Team::getName));
    


    Also note that the default sort option is ascending, but you can set it to descending using:

        // e.g. Sort by points descending.
        Iteams.sort(Comparator.comparing(Team::getPoints).reversed());
    


    That way, you can sort your ArrayList in different ways whenever you want, just by adding the method you want.

    0 讨论(0)
  • 2020-12-03 06:17

    Source : Here

    You can use Collections.sort with a custom Comparator<Team>.

        class Team {
            public final int points;
            // ...
        };
    
        List<Team> players = // ...
    
        Collections.sort(players, new Comparator<Team>() {
            @Override public int compare(Team p1, Team p2) {
                return p1.points- p2.points;
            }
    
        });
    

    Alternatively, you can make Team implementsComparable<Team>. This defines the natural ordering for all Team objects. Using a Comparator is more flexible in that different implementations can order by name, age, etc.

    See also

    • Java: What is the difference between implementing Comparable and Comparator?

    For completeness, I should caution that the return o1.f - o2.f comparison-by-subtraction shortcut must be used with extreme caution due to possible overflows (read: Effective Java 2nd Edition: Item 12: Consider implementing Comparable). Presumably hockey isn't a sport where a player can score goals in the amount that would cause problems =)

    See also

    • Java Integer: what is faster comparison or subtraction?
    0 讨论(0)
  • 2020-12-03 06:18
    public class Team {
       private int points;
       private String name;
    
    public Team(String n, int p) {
        name = n;
        points = p;
    }
    
    public int getPoints() {
        return points;
    }
    
    public String getName() {
        return name;
    }
    
    public static void main(String[] args) {
        List<Team> lteams = new ArrayList<Team>();
    
        lteams.add(new Team("FC Barcelona", 0));
        lteams.add(new Team("Arsenal FC", 2));
        lteams.add(new Team("Chelsea", 3));
    
        Collections.sort(lteams, new MyComparator());
    
        for (Team lteam : lteams) {
            System.out.println(lteam.name + ": " + lteam.points + " points");
        }
    }
    

    }

    class MyComparator implements Comparator<Team> {
    @Override
    public int compare(Team o1, Team o2) {
        if (o1.getPoints() > o2.getPoints()) {
            return -1;
        } else if (o1.getPoints() < o2.getPoints()) {
            return 1;
        }
        return 0;
    }}
    

    Output:
    Chelsea: 3 points
    Arsenal FC: 2 points
    FC Barcelona: 0 points

    0 讨论(0)
提交回复
热议问题