?1:根據對象屬性降序排列
public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {LinkedHashMap<T, Integer> rankingMap = new LinkedHashMap<>();List<T> distinctKeys = dataList.stream().map(keyExtractor).distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());for (int i = 0; i < distinctKeys.size(); i++) {rankingMap.put(distinctKeys.get(i), i + 1);}return rankingMap;}
2:根據對象屬性升序排列
?
public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {LinkedHashMap<T, Integer> rankingMap = new LinkedHashMap<>();List<T> distinctKeys = dataList.stream().map(keyExtractor).distinct().sorted().collect(Collectors.toList());for (int i = 0; i < distinctKeys.size(); i++) {rankingMap.put(distinctKeys.get(i), i + 1);}return rankingMap;}
?3:方法調用
LinkedHashMap<BigDecimal, Integer> rankingMap = EntityConvertUtil.calculateRanking(returnDataList, ProductPerformanceInfoVO::getSalesVolume);
4:說明
方法添加泛型約束 <T extends Comparable<? super T>>
,確保 T
可以進行自然排序(如 Integer
, String
等)。如果 T
是自定義類型且未實現 Comparable
,則需提供顯式 Comparator;
5:示例場景:
假設 keyExtractor
提取的是 Integer
類型的值,原始數據為 [3, 1, 4, 1, 5]
:
- 升序:排序后的鍵為?
[1, 3, 4, 5]
,排名為?{1=1, 3=2, 4=3, 5=4}
。 - 降序:排序后的鍵為?
[5, 4, 3, 1]
,排名為?{5=1, 4=2, 3=3, 1=4}
。