Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ArrayList中对对象中的变量进行排序_Java_Sorting_Arraylist - Fatal编程技术网

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

Java 在ArrayList中对对象中的变量进行排序,java,sorting,arraylist,Java,Sorting,Arraylist,我有一个ArrayList,里面有3个对象。在我看来,每件物品都是一本新书。每本书的标题、零售价、库存量等都有不同的价值 如何比较和排序所有对象的零售价格。我听说过 Collections.sort(books, new Comparator<BookInfo>(){ @Override public int compare(BookInfo book1, BookInfo book2) { return book1.getTitle().compar

我有一个ArrayList,里面有3个对象。在我看来,每件物品都是一本新书。每本书的标题、零售价、库存量等都有不同的价值

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

Collections.sort(books, new Comparator<BookInfo>(){
    @Override
    public int compare(BookInfo book1, BookInfo book2) {
        return book1.getTitle().compareTo(book2.getTitle());
    }
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
返回book1.getTitle().compareTo(book2.getTitle());
}
});
使用自定义比较器,但我不能对double/int使用
compareTo
方法。我该如何实现或更改它,以便比较double/int?

您可以始终这样做

假设:价格值为
Double

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

    @Override
    public int compare(BookInfo book1, BookInfo book2) {
        return book1.getPrice().compareTo(book2.getPrice());
    }
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
返回book1.getPrice().compareTo(book2.getPrice());
}
});
参考:

你可以一直这样做

假设:价格值为
Double

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

    @Override
    public int compare(BookInfo book1, BookInfo book2) {
        return book1.getPrice().compareTo(book2.getPrice());
    }
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
返回book1.getPrice().compareTo(book2.getPrice());
}
});
参考:

试着将等级转换为双倍,然后比较:

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(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
返回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;
        }
    }); 
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
int res=p1。与(p2)相比;
如果(res==0){
返回book1.getTitle().compareTo(book2.getTitle());
}
返回res;
}
}); 

尝试转换为双级,然后比较:

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(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
返回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;
        }
    }); 
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
int res=p1。与(p2)相比;
如果(res==0){
返回book1.getTitle().compareTo(book2.getTitle());
}
返回res;
}
}); 

您可以实现
比较器
,但是您只需要根据两个对象的比较返回正确的值:

  • 如果
    book1
  • 如果
    book1>book2
  • 如果
    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;
        }
    });
    
    Collections.sort(图书、新比较器(){
    @凌驾
    公共整数比较(BookInfo book1、BookInfo book2){
    if(book1.getPrice()book2.getPrice()){
    返回1;
    }否则返回0;
    }
    });
    

通过这种方式,您可以自定义
比较器的任何行为。

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

  • 如果
    book1
  • 如果
    book1>book2
  • 如果
    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;
        }
    });
    
    Collections.sort(图书、新比较器(){
    @凌驾
    公共整数比较(BookInfo book1、BookInfo book2){
    if(book1.getPrice()book2.getPrice()){
    返回1;
    }否则返回0;
    }
    });
    

通过这种方式,您可以自定义
比较器的行为。

只需使用
来比较基本值。是的,这只适用于比较两个值,但我需要的是比较所有值并对它们进行排序。@user3325783:要对列表进行排序,您只需要一个比较两个值的函数。。。也许可以阅读更多关于排序算法的内容?只需使用
来比较基本值。是的,这只适用于比较两个值,但我需要的是比较所有值并对它们进行排序。@user3325783:要对列表进行排序,您只需要一个比较两个值的函数。。。也许可以多读一些关于排序算法的书?我认为这行不通,因为你不能取消双重限制。而且价格是双倍的,我认为这行不通,因为你不能取消双倍的限制。而且价格是双倍的