I have a list of point objects, which I want to sort by a certain coordinate, say the x-values. Does Java provide any useful mechanisms or should I avail myself of one of the common sort algorithms?
            Asked
            
        
        
            Active
            
        
            Viewed 4.7k times
        
    4 Answers
21
            
            
        Yes create a custom Comparator , and use it to sort list of points
class Point{
    private int x;
    private int y;
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public Point() {
    }
}
List<Point> points = new ArrayList<Point>();
points.add(new Point(1, 2));
points.add(new Point(60, 50));
points.add(new Point(50, 3));
Collections.sort(points,new Comparator<Point>() {
public int compare(Point o1, Point o2) {
    return Integer.compare(o1.getX(), o2.getX());
}
});
 
    
    
        jmj
        
- 237,923
- 42
- 401
- 438
5
            
            
        In Point class you should implement Comparable interface with generic type <Point> and use Collections.sort (java.util package) for sorting List<Point>
Assume:
class Point implements Comparable<Point>{
    int compareTo(Point other){ /* your logic */}
}
List<Point> list = new ArrayList<Point>();
/* adding points */
Collections.sort(list);
 
    
    
        Sergey Vedernikov
        
- 7,609
- 2
- 25
- 27
1
            
            
        You should either make your point class to implement Comparable interface or provide sort() method with your own Comparator object, which tells sort() how to order your objects. There a lot of examples around here.
 
    
    
        Konstantin Milyutin
        
- 11,946
- 11
- 59
- 85
1
            
            
        You can use something like a Bean Comparator so you don't have to keep creating custom Comparators.
 
    
    
        camickr
        
- 321,443
- 19
- 166
- 288
