package org.example.testTreeMap;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.SortedSet;
import java.util.TreeSet;
public class Main3 {
public static void main(String[] args) {
// 1.模拟内存数据序列化到db中,榜单最大2人
TreeSet<RankItem> set = new TreeSet<>();
set.add(new RankItem(1L, "jn", 80));
if(set.size() > 2){
set.pollLast();
}
set.add(new RankItem(2L, "jn2", 70));
if(set.size() > 2){
set.pollLast();
}
set.add(new RankItem(3L, "jn3", 80));
if(set.size() > 2){
set.pollLast();
}
set.add(new RankItem(4L, "jn4", 60));
if(set.size() > 2){
set.pollLast();
}
String rankDataStr = JSON.toJSONString(set);
// 2.模拟db中load出来排行榜数据
// 反序列化(注意parseObject中需要使用TypeReference,而不是直接Set.class,不然得到的是JSONObject类型)
TreeSet<RankItem> memRankTreeSet = JSON.parseObject(rankDataStr, new TypeReference<>() {
});
System.out.println(memRankTreeSet);
// 查找排行榜
SortedSet<RankItem> rankItems = memRankTreeSet.subSet(new RankItem(0L, "", 100), new RankItem(0L, "", 71));
System.out.println(rankItems);
}
}
/*
[RankItem(uid=3, name=jn3, score=80), RankItem(uid=1, name=jn, score=80), RankItem(uid=2, name=jn2, score=70), RankItem(uid=4, name=jn4, score=60)]
*/
RankIten.java
package org.example.testTreeMap;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Objects;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RankItem implements Comparable<RankItem> {
private Long uid;
private String name;
private int score;
@Override
public int compareTo(RankItem o) {
if (this.getScore() != o.getScore()) {
return o.getScore() - this.getScore();
}
return o.getName().compareTo(this.getName());
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof RankItem)) return false;
RankItem rankItem = (RankItem) o;
return Objects.equals(getUid(), rankItem.getUid());
}
@Override
public int hashCode() {
return Objects.hash(getUid());
}
}