对ArrayList中的对象中的变量进行排序

时间:2014-02-19 00:42:55

标签: java sorting arraylist

我有一个包含3个对象的ArrayList。在我的案例中,每个对象都是一本新书。每本书都有不同的标题,零售价格,库存数量等值。

如何比较和排序所有对象的零售价格。我听说过

Collections.sort(books, new Comparator<BookInfo>(){
    @Override
    public int compare(BookInfo book1, BookInfo book2) {
        return book1.getTitle().compareTo(book2.getTitle());
    }
});

使用自定义Comparator,但我不能将compareTo方法用于双精度/整数。我如何实现这一点,或者更改它以便我可以比较双打/整数?

3 个答案:

答案 0 :(得分:2)

你总是可以这样做

假设:价格值为Double

   Collections.sort(books, new Comparator<BookInfo>(){

    @Override
    public int compare(BookInfo book1, BookInfo book2) {
        return book1.getPrice().compareTo(book2.getPrice());
    }
});

参考: How to sort an array of ints using a custom comparator?

答案 1 :(得分:1)

尝试转换为Double类,然后比较:

Collections.sort(books, new Comparator<BookInfo>(){

        @Override
        public int compare(BookInfo book1, BookInfo book2) {
            Double p1 = book1.getRetailPrice();
            Double p2 = book2.getRetailPrice();
            return p1.compareTo(p2);
        }
    });

如果您想在价格之后先排序,在名称之后排序第二:

Collections.sort(books, new Comparator<BookInfo>(){

        @Override
        public int compare(BookInfo book1, BookInfo book2) {
            Double p1 = book1.getRetailPrice();
            Double p2 = book2.getRetailPrice();
            int res = p1.compareTo(p2);
            if(res == 0){
                return book1.getTitle().compareTo(book2.getTitle());
            }
            return res;
        }
    }); 

答案 2 :(得分:1)

您可以根据需要实现Comparator,只需要返回正确的值,具体取决于两个对象的比较:

    如果book1 < book2 ,则为
  • 负整数 如果book1 > book2
  • ,则为
  • 正整数
  • 0如果book1 == book2

    Collections.sort(books, new Comparator<BookInfo>() {
        @Override
    
        public int compare(BookInfo book1, BookInfo book2) {
            if (book1.getPrice() < book2.getPrice()) {
                return -1;
            } else if (book1.getPrice() > book2.getPrice()) {
                return 1;
            } else return 0;
        }
    });
    

这样您就可以自定义Comparator的行为。