【问题标题】:Sorting variables in objects in an ArrayList对 ArrayList 中对象中的变量进行排序
【发布时间】:2014-02-19 00:42:55
【问题描述】:

我有一个包含 3 个对象的 ArrayList。就我而言,每个对象都是一本新书。每本书的书名、零售价、库存数量等都有不同的值。

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

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

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

【问题讨论】:

  • 只需使用&lt;==&gt; 来比较原始值。
  • 是的,这仅适用于比较两个值,但我需要比较所有值并对它们进行排序。
  • @user3325783:要对列表进行排序,您只需要一个比较两个值的函数...也许可以阅读更多有关排序算法的信息?

标签: java sorting arraylist


【解决方案1】:

你总是可以这样做

假设:价格值为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?

【讨论】:

  • 我认为这行不通,因为你不能取消双打。而且价格是双倍的
【解决方案2】:

尝试转换为 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;
        }
    }); 

【讨论】:

    【解决方案3】:

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

    • 负整数如果book1 &lt; book2
    • 如果是book1 &gt; 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 的行为。

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2017-12-12
      • 2013-03-19
      • 2014-11-09
      相关资源
      最近更新 更多