Lỗi so sánh 2 đối tượng Comparator trong Java

case 3:

Collections.sort(productList, new Comparator<Product>() {

    @Override
    public int compare(Product o1, Product o2) {
        if (o1.getcost() < o2.getcost())     return 1;
         else  return -1;
    }
});

for (Product p : productList) {
    p.show();
}
break;

mọi người có thể sửa giúp e k ạ, nó cứ báo đỏ ở chỗ so sánh o1 và o2. Em cảm ơn mn nhiều ạ

Báo đỏ là báo gì? đưa error log lên đây bạn.
Mà thật ra chỗ compare chỉ cần return o1.getCost() - o2.getCost() là done.

7 Likes

Bạn nói không rõ ràng là lỗi gì, có thể là Product không có phương thức getcost() hoặc getcost() trả về chuỗi, etc. Bạn cũng mắc một lỗi là phương thức method này cần trả về 3 giá trị là 0, 1, -1 tương đương với thể hiện bằng, lớn hơn, nhỏ hơn.

Comparator<Product> compareCost = new Comparator<>() {
	@Override
    public int compare(Product o1, Product o2) {
    	if (o1.getcost() < o2.getcost())     return  1;
        if (o1.getcost() < o2.getcost())     return -1;
        return 0;
    }
};
Collections.sort(productList, compareCost);

Có thể dùng lambda expression để viết gọn lại và dùng phương thức compareTo() để so sánh (chuỗi hay số đều được);

Comparator<Product> compareCost = (Product o1, Product o2) -> {
	return o1.getcost().compareTo(o2.getcost());
};
Collections.sort(productList, compareCost);
2 Likes

ở đây lỗi là do bạn chưa check đủ trường hợp nhé. Nếu dùng hàm so sánh sẵn comparator này thì bạn phải tuân theo form của hàm. Ở đây bạn thiếu trường hợp return 0 nên lỗi thôi. Chi tiết bạn tìm hiểu qua gg hoặc ctrl + click vào Comparator đọc dòng in đậm của chú thích hàm nhé (nếu bạn dùng netbean)

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?