Java排行榜中多级排序的一种正确实现方式

版权声明:阅读优秀源码,宛若一场探索未知的旅行,疑惑处惊奇,优雅处旖旎; 一切都是新奇的,千回百转与大师的心灵触碰,一场跨越时空的对话,涤荡了原有的愚昧,蜕变出更好的自己。 https://blog.csdn.net/FENGQIYUNRAN/article/details/81259654

需求:1,外层根据参与人数排序,并据此分页

            2,内层首先根据级别排序,级别相同时,按照票数排序,固定展示8条

实现基础:ArrayList

可能的坑:仅仅对最外层list执行一次排序调用,此时,无法确保总是正确,有时正确

正确姿势:首先对每个内层list执行排序,然后加入外层list,最后对外层list执行一次排序

代码实战:

1.内层model


import lombok.Data;

/**
 * @Author: feeler
 * @Date: 2018/07/12 21:17
 * @Description:
 */
@Data
public class PlayerKillingVideoUserInfo implements Comparable<PlayerKillingVideoUserInfo> {

    private String userid;

    private int source;

    private String userName;
    
    private String headImageUrl;

    private String pkDate;

    private String videoId;

    private long voteCount;

    private int currentLevel;


    /** high to low with currentLevel or voteCount*/
    @Override
    public int compareTo(PlayerKillingVideoUserInfo o) {
        if(this.currentLevel > o.currentLevel) {
            return -1;
        } else if(this.currentLevel < o.currentLevel) {
            return 1;
        } else {
            if(this.voteCount > o.voteCount) {
                return -1;
            } else if(this.voteCount < o.voteCount) {
                return 1;
            } else {
                return 0;
            }
        }
    }
}

2.外层model


import com.services.mapper.database.model.PlayerKillingVideoUserInfo;
import lombok.Data;

import java.util.List;

/**
 * @Author: feeler
 * @Date: 2018/07/13 15:37
 * @Description:
 */
@Data
public class ThemeRankInfo implements Comparable<ThemeRankInfo>{

    private long invovledCount;
    private long pageCount;
    private List<PlayerKillingVideoUserInfo> playerKillingVideoUserInfoList;

    @Override /** 由高到低 */
    public int compareTo(ThemeRankInfo o) {
        if(this.invovledCount > o.invovledCount) {
            return -1;
        } else if(this.invovledCount < o.invovledCount) {
            return 1;
        } else {
            return 0;
        }
    }
}

3. 排序方式

 for(PlayerKillingThemeDto playerKillingThemeDto: playerKillingThemeDtoList) {
                ThemeRankInfo themeRankInfo = new ThemeRankInfo();
                themeRankInfo.setPageCount(pageCount);
                for (PlayerKillingVideoUserDto playerKillingVideoUserDto : playerKillingVideoUserDtoList) {
                    PlayerKillingVideoUserInfo playerKillingVideoUserInfo = new PlayerKillingVideoUserInfo();
                    ......
                    playerKillingVideoUserInfo.setCurrentLevel(playerKillingVideoUserDto.getCurrentLevel());
                    playerKillingVideoUserInfoList.add(playerKillingVideoUserInfo);
                }
                /**step 1 sort*/
                Collections.sort(playerKillingVideoUserInfoList);
                themeRankInfo.setPlayerKillingVideoUserInfoList(playerKillingVideoUserInfoList);
                themeRankInfoList.add(themeRankInfo);
            }

  /**step 2 sort*/
  Collections.sort(themeRankInfoList);

猜你喜欢

转载自blog.csdn.net/FENGQIYUNRAN/article/details/81259654