@Data
class Product implements Comparator<Product>{
String name;
int popularity;
int salesVolume;
public String toString() {
return String.format(java.util.Locale.ROOT, "[\"%s\", %d, %d]", name, popularity, salesVolume);
}
@Override
public int compare(Product o1, Product o2) {
if (o1.popularity != o2.popularity) {
return o2.popularity - o1.popularity;
} else if (o1.popularity == o2.popularity &&
o1.salesVolume != o2.salesVolume) {
return o2.salesVolume - o1.salesVolume;
} else if (o1.popularity == o2.popularity &&
o1.salesVolume == o2.salesVolume) {
return o1.name.compareTo(o2.name);
}
return 0;
}
}
public class test
{
public static void main(String[] args) {
Product product1 = new Product();
product1.setName("product1");
product1.setPopularity(10);
product1.setSalesVolume(100);
Product product2=new Product();
product2.setName("product2");
product2.setPopularity(20);
product2.setSalesVolume(200);
Product product3=new Product();
product3.setName("product3");
product3.setPopularity(20);
product3.setSalesVolume(150);
List<Product> list=new ArrayList<>();
list.add(product1);
list.add(product2);
list.add(product3);
System.out.println(list);
list.sort(new Product());
System.out.println(list);
}
}
内部类写法
Collections.sort(list, new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if (o1.popularity != o2.popularity) {
return o2.popularity - o1.popularity;
} else if (o1.popularity == o2.popularity &&
o1.salesVolume != o2.salesVolume) {
return o2.salesVolume - o1.salesVolume;
} else if (o1.popularity == o2.popularity &&
o1.salesVolume == o2.salesVolume) {
return o1.name.compareTo(o2.name);
}
return 0;
}
});
System.out.println(list);