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

需求: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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FeelTouch Labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值