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);
相關文章
- Java中氣泡排序的原生實現方式(正序和逆序)Java排序
- 如何正確實現 Java 中的 HashCodeJava
- TensorFlow中RNN實現的正確開啟方式RNN
- 如何正確實現Java中的hashCode方法Java
- Java實現多執行緒的三種方式Java執行緒
- Redis分散式鎖的正確實現方式Redis分散式
- Java中Elasticsearch 實現分頁方式(三種方式)JavaElasticsearch
- Java建立多執行緒的幾種方式實現Java執行緒
- 分散式鎖實現的正確開啟方式分散式
- Java中Singleton的三種實現方式解析Java
- Java學習的正確開啟方式Java
- java中多種方式讀檔案Java
- 分散式鎖的多種實現方式分散式
- Java中測試異常的多種方式Java
- 正確的equals實現
- #MyBatis多表查詢 #多對一、一對多的兩種實現方式 @FDDLCMyBatis
- Java中實現並行請求兩種方式Java並行
- 多種跨域方式實現原理跨域
- JAVA中實現單例(Singleton)模式的八種方式Java單例模式
- Awk 陣列排序多種實現方法陣列排序
- Java中的多級快取設計與實現Java快取
- Java中鎖的實現方式Java
- Java Singleton的3種實現方式Java
- AOP的四種主要Java實現方式Java
- java幾種代理模式的實現方式Java模式
- java實現Hbase中的查詢(一)Filter方式JavaFilter
- Java中確保執行緒安全最常用的兩種方式Java執行緒
- 這才是遊戲本推薦排行榜榜首的正確開啟方式!遊戲
- 水平垂直居中佈局的多種實現方式
- Javascript 五十問——實現的繼承多種方式JavaScript繼承
- 單例模式的各種實現方式(Java)單例模式Java
- Java細粒度鎖實現的3種方式Java
- 實現 Java 平臺的三種方式(轉)Java
- Java多執行緒實現方式Java執行緒
- 實踐作業的一種實現方式
- Node中POST請求的正確處理方式
- 實現微前端的十種方式 【第一種】前端
- 正確的折半查詢實現