工具类
@Component
public class SortListUtil<E> {
public static void sort(List list, final String method, final String sort) {
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
int ret = 0;
try {
Field f1 = o1.getClass().getDeclaredField(method);
f1.setAccessible(true);
Object s = f1.get(o1);
Object s1 = f1.get(o2);
if ((f1.getType() == Integer.class) && (f1.getType() == Integer.class)) {
if (StringUtils.isNotEmpty(sort) && "desc".equals(sort)) {
ret = ((Integer) s1).compareTo(((Integer) s));
} else {
ret = ((Integer) s).compareTo(((Integer) s1));
}
}
if ((s instanceof String) && (s1 instanceof String)) {
if (StringUtils.isNotEmpty(sort) && ERPService.DESC.equals(sort)) {
ret = s1.toString().compareTo(s.toString());
} else {
ret = s.toString().compareTo(s1.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
});
}
}
测试
测试demo
public static void main(String[] args) {
ArrayList<DataAnalysisVo> dataAnalysisVos = new ArrayList<>();
dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(100).setVolume(50).setSigningRate(0.20));
dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(100).setVolume(40).setSigningRate(0.25));
dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(100).setVolume(100).setSigningRate(1.00));
dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(90).setVolume(30).setSigningRate(0.30));
SortListUtil.sort(dataAnalysisVos,"volume","desc");
System.out.println(dataAnalysisVos.toString());
}
测试结果
测试类
@Data
@Accessors(chain = true)
@NoArgsConstructor
public class DataAnalysisVo {
private String cityName;
private String staffCount;
private Integer signedQuantity;
private Integer volume;
private Double signingRate;
}