关于集合排序
起因:给了我一个需求 ,想把一个列表的排序改为字段"name 按值为APP11.x 的数据排到最上面,把剩下的"name为"APP*的排到APP11.x 的下面,剩下的数据排到最后面, 然后整体再用 name排序
一个简单的思路
把集合中新增一个字段orderTe来做临时排序字段,可通过orderTe字段来控制第一个条件正序排序,然后再按照name倒叙排序即可
demo:
public class OrderParam {
private String name;
private Integer age;
private Integer orderTe;
private static final String APPGALLY = "^APPGALLY\\d.*$"; private static final String APPGALLYAll = "^APPGALLY.*$";
@Override
public String toString() {
return "OrderParam{" +
"name='" + name + '\'' +
", age=" + age +
", orderTe=" + orderTe +
'}';
}
public OrderParam(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getOrderTe() {
if (Pattern.matches(APPGALLY, this.name)) {
return 1;
} else if (Pattern.matches(APPGALLYAll, this.name)) {
return 2;
}
return 3;
}
public void setOrderTe(Integer orderTe) {
this.orderTe = orderTe;
}
}
测试:
OrderParam test = new OrderParam("APPGALLY11.4.1", 1);
OrderParam test2 = new OrderParam("APPGALLY11.4.2", 1);
OrderParam test3 = new OrderParam("APPGALLY11.3.1", 1);
OrderParam test4 = new OrderParam("APPGALLY11.5.1", 1);
OrderParam test5 = new OrderParam("APPGALLYuSER", 1);
OrderParam test6 = new OrderParam("APPGALLYALL", 1);
OrderParam test7 = new OrderParam("AOP11.5", 1);
List<OrderParam> testList = new ArrayList<>();
testList.add(test2);
testList.add(test);
testList.add(test4);
testList.add(test3);
testList.add(test7);
testList.add(test5);
testList.add(test6);
testList.sort(Comparator.comparingInt(OrderParam::getOrderTe).reversed().thenComparing(OrderParam::getName).reversed());

浙公网安备 33010602011771号