在arraylist中排序对象

时间:2015-09-20 09:31:46

标签: java sorting arraylist

我有一个类类型的ArrayList,特别是:

$ docker run --rm -it -v $PWD/mydockerkey:/root/.ssh/id_rsa ubuntu find /root/.ssh -type f
/root/.ssh/id_rsa

现在的输出是:

ArrayList<RowColElem<T>> myList = new ArrayList<RowColElem<T>>();
myList.add(new RowColElem(4,4,11));
myList.add(new RowColElem(1,1,11));
myList.add(new RowColElem(3,3,11));
myList.add(new RowColElem(1,0,11));
myList.add(new RowColElem(3,0,11));

是否可以针对row和col对升序进行排序?所以输出将是:

[(4,4,11),(1,1,11),(3,3,11),(1,0,11),(3,0,11)]

是否可以对列表中的列表进行排序,而不是在[(1,0,11),(1,1,11),(3,0,11),(3,3,11),(4,4,11)] 类中实现ComparableComparator

2 个答案:

答案 0 :(得分:4)

是的,您可以使用Comparator方法实现此目的。它在Java 8中相当简洁:

Collections.sort(myList, 
    Comparator.comparingInt(RowColElem::getRow).thenComparingInt(RowColElem::getCol));

这将使用行进行比较,然后,如果它们相等,则使用列进行比较。 Comparator接口有一些非常有用的静态和默认方法 - 值得仔细研究它。

答案 1 :(得分:1)

如果要在插入新元素时对集合进行排序,可能需要考虑使用TreeSet或其他自排序结构而不是ArrayList,具体取决于您的用例。迭代时,这两个结构自然会按排序顺序保持自己。否则,您可能必须实现自己的SortedList类,它可以透明地插入排序。

无论哪种方式,您都必须在课堂上实施Comparable<RowColElem<T>>。这是相当直接的。

@Override
public int compareTo(RowColElem<T> o) {

    int rowComp = Integer.compare(this.row, o.row);

    if (rowComp == 0) {
        return Integer.compare(this.column, o.column);
    }

    return rowComp;
}