版权声明:阅读优秀源码,宛若一场探索未知的旅行,疑惑处惊奇,优雅处旖旎; 一切都是新奇的,千回百转与大师的心灵触碰,一场跨越时空的对话,涤荡了原有的愚昧,蜕变出更好的自己。 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);