提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
提示:以下是本篇文章正文内容,下面案例可供参考
一、集合排序及排名、设置排名值
代码如下(示例):
public interface IArrayRank {
public Integer getRank();
public void setRank(Integer rank);
}
/**
* 集合排序及排名、设置排名值
* @param list
* @param sortField
* @param sortOrder
* @return
*/
public static <T extends IArrayRank> List<T> allRankList(List<T> list, String sortField, String sortOrder){
List<T> sortList = list.stream().sorted((a, b) -> {
Object value1 = ReflectUtil.invoke(a, "get" + StrUtil.upperFirst(sortField));
Object value2 = ReflectUtil.invoke(b, "get" + StrUtil.upperFirst(sortField));
if (sortOrder.equalsIgnoreCase("asc")) {
return ( value1 + "").compareTo(value2 + "");
} else {
return (value2 + "").compareTo(value1 + "");
}
}).collect(Collectors.toList());
Map<Object,Integer> scoreMap =new HashMap<>();
for(int i=0; i<sortList.size(); i++ ){
T po = sortList.get(i);
Object value = ReflectUtil.invoke(po, "get"+ StrUtil.upperFirst(sortField));
scoreMap.putIfAbsent(value, i+1);
}
for(IArrayRank po: sortList){
Object key = ReflectUtil.invoke(po,"get"+ StrUtil.upperFirst(sortField));
Integer rank =scoreMap.get(key);//排名值
po.setRank(rank);
}
return sortList;
}
总结
学无止境