日期:2014-05-20  浏览次数:20579 次

java List<>排序问题
给出一个乱序的list<Seat>,Seat里面有int类型的rowNum(排号)和line座位号,怎么得到先排好序的(先比较rowNum,相同则比较 line 从小到大)的list?

------解决方案--------------------
Java code


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

class Seat {
    private int rowNumber;
    private int line;

    public Seat(int rowNumber, int line) {
    this.rowNumber = rowNumber;
    this.line = line;
    }

    public int getRowNumber() {
    return rowNumber;
    }

    public void setRowNumber(int rowNumber) {
    this.rowNumber = rowNumber;
    }

    public int getLine() {
    return line;
    }

    public void setLine(int line) {
    this.line = line;
    }

    @Override
    public String toString() {
    return rowNumber + "  " + line;
    }

}

//比较规则
class SeatComparator implements Comparator<Seat> {
    public int compare(Seat o1, Seat o2) {
    return (o1.getRowNumber() < o2.getRowNumber() ? -1 : 
        (o1.getRowNumber()> o2.getRowNumber() ?  1: (
            o1.getLine() < o2.getLine() ? -1 : 
                (o1.getLine()> o2.getLine() ? 1 :0        
        ))));
    }
}

public class TestSeat {
    public static void main(String[] args) {
    Seat s1 = new Seat(1, 1);
    Seat s2 = new Seat(3, 1);
    Seat s3 = new Seat(2, 4);
    Seat s4 = new Seat(3, 2);

    List<Seat> seats = new ArrayList<Seat>();
    seats.add(s1);
    seats.add(s2);
    seats.add(s3);
    seats.add(s4);

    System.out.println("原始数据:");
    for (Seat seat : seats) {
        System.out.println(seat);
    }

    System.out.println("进行排序......");
    SeatComparator seatComparator = new SeatComparator();
    Collections.sort(seats, seatComparator);
    for (Seat seat : seats) {
        System.out.println(seat);
    }
    }
}
/*
原始数据:
1  1
3  1
2  4
3  2
进行排序......
1  1
2  4
3  1
3  2

*/