接續前一天的文章,利用Comparator製作更客製化的排序,排序條件:品牌不同就用品牌排序,品牌相同就比 RAM。
ComparatorRunner.java
package Geeks;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ComparatorRunner {
public static void main(String[] args) {
List<Laptop> laps = new ArrayList<>();
laps.add(new Laptop("MSI", 10, 1000));
laps.add(new Laptop("Asus", 16, 12000));
laps.add(new Laptop("Sony", 8, 600));
laps.add(new Laptop("Lenovo", 6, 900));
laps.add(new Laptop("Asus", 8, 1200));
// 更客製化的排序
Comparator<Laptop> brandThenRamComparator = (l1, l2) -> {
int brandResult = l1.getBrand().compareTo(l2.getBrand());
if (brandResult != 0) {
return brandResult; // 品牌不同就用品牌排序
}
return l1.getRam() - l2.getRam(); // 品牌相同就比 RAM
};
Collections.sort(laps, brandThenRamComparator);
for (Laptop l2 : laps) {
System.out.println(l2);
}
}
}
Laptop.java
package Geeks;
import java.util.Comparator;
public class Laptop{
private String brand;
private int ram;
private int price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getRam() {
return ram;
}
public void setRam(int ram) {
this.ram = ram;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Laptop [brand=" + brand + ", ram=" + ram + ", price=" + price + "]";
}
// 加上建構子,才可以在ComparableRunner.java使用new Laptop("Apple",8,1200)等
public Laptop(String brand, int ram, int price) {
super();
this.brand = brand;
this.ram = ram;
this.price = price;
}
}