All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ideaaedi.commonds.rank.RankSupporter Maven / Gradle / Ivy

The newest version!
package com.ideaaedi.commonds.rank;


import java.util.ArrayList;
import java.util.List;

/**
 * 排名实现器
 *
 * @author JustryDeng 
 * @since 1.0.0
 */
public interface RankSupporter> {
    
    /**
     * 自然排名
     * 
* 如: 假设分数是100、90、80、80、70,降序排序,那么NATURAL排名后排名是1、2、3、4、5 *
* @param nonNullSortedList * 非空集合(集合本身不为空, 集合里面的元素全都不为null; 且这是一个有序的集合) * @return 排完名次后的集合 */ List natural(List nonNullSortedList); /** * 相同值则排名相同, 后面那个不同的则排名一下跳至对应的位置 *
* 如: 假设分数是100、90、80、80、70,降序排序,那么SAME_RAKE_INDEX_POSTPONED排名后排名是1、2、3、3、5 *
* @param nonNullSortedList * 非空集合(集合本身不为空, 集合里面的元素全都不为null; 且这是一个有序的集合) * @return 排完名次后的集合 */ List indexPostponedIfSame(List nonNullSortedList); /** * 相同值则排名相同, 后面那个不同的则排名+1 *
* 如: 假设分数是100、90、80、80、70,降序排序,那么SAME_RAKE_RANK_POSTPONED排名后排名是1、2、3、3、4 *
* @param nonNullSortedList * 非空集合(集合本身不为空, 集合里面的元素全都不为null; 且这是一个有序的集合) * @return 排完名次后的集合 */ List rankPostponedIfSame(List nonNullSortedList); /** * 自定义排名 * * @param nonNullSortedList * 非空集合(集合本身不为空, 集合里面的元素全都不为null; 且这是一个有序的集合) * @return 排完名次后的集合 */ default List customized(List nonNullSortedList) { throw new UnsupportedOperationException("temporarily does not support custom sorting"); } /** * 排名起始值 * * @return 排名起始值 */ default int rankStartValue() { return 1; } /** * 排名 * * @param nonNullSortedList * 已经排过序的数据 * @param rankStrategy * 排名策略 * * @return 排名后的数据 */ default List doRank(List nonNullSortedList, RankStrategy rankStrategy) { // 非空校验、不含null校验 if (nonNullSortedList == null || nonNullSortedList.size() == 0) { throw new IllegalArgumentException("nonNullSortedList cannot be empty."); } if (nonNullSortedList.contains(null)) { throw new IllegalArgumentException("nonNullSortedList cannot contain null."); } // 筛选出哪些需要排名、哪些不需要排名 List notNeedRankList = new ArrayList<>(16); List needRankList = new ArrayList<>(16); nonNullSortedList.forEach(x -> { if (x.shouldJoinRank()) { needRankList.add(x); } else { notNeedRankList.add(x); } }); if (needRankList.size() == 0) { return nonNullSortedList; } // 进行排名 List sortedAndRankedList; switch (rankStrategy) { case NATURAL: sortedAndRankedList = natural(needRankList); break; case INDEX_POSTPONED_IF_SAME: sortedAndRankedList = indexPostponedIfSame(needRankList); break; case RANK_POSTPONED_IF_SAME: sortedAndRankedList = rankPostponedIfSame(needRankList); break; case CUSTOMIZED: sortedAndRankedList = customized(needRankList); break; default: throw new RuntimeException("un-support enums for [" + rankStrategy + "]"); } // 将不需要排名的对象放置在最后 sortedAndRankedList.addAll(notNeedRankList); return sortedAndRankedList; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy