【发布时间】:2017-09-14 12:20:55
【问题描述】:
我正在尝试模拟一个游戏板,其中多个玩家可以提交他们的游戏分数。
POJO 即。 Entry.java 代表排行榜中的一个条目。 注意重写的 equals() 方法。
Position 是排行榜中的位置,1 是用户 最高分
public class EntryTreeMapOption {
private String uid;
private int score;
private int position;
public EntryTreeMapOption(String uid, int score) {
this.uid = uid;
this.score = score;
}
public EntryTreeMapOption() {
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((uid == null) ? 0 : uid.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
EntryTreeMapOption other = (EntryTreeMapOption) obj;
if (uid == null) {
if (other.uid != null)
return false;
} else if (!uid.equals(other.uid))
return false;
return true;
}
@Override
public String toString() {
return "Entry [uid=" + uid + ", score=" + score + ", position=" + position + "]";
}}
我正在使用 TreeMap 来存储条目,根据分数,它们会自动排序
public class GameDefault2 {
private TreeMap<EntryMapOption, String> leaderBoardEntryUserMap;
{
leaderBoardEntryUserMap = new TreeMap<>(Comparator.comparingInt(EntryTreeMapOption::getScore).reversed()
.thenComparing(EntryTreeMapOption::getUid));
}
@Override
public void submitScore(String uid, int score) {
EntryMapOption newEntry = new EntryMapOption(uid, score);
leaderBoardEntryUserMap.put(newEntry, uid);
}
@Override
public List<EntryMapOption> getLeaderBoard(String uid) {
List<EntryMapOption> userEntryList = .....
.....
.....
return entriesOptionTwo;
}
}
如何设置条目的“位置”字段?例如:以下是按分数排序的条目,我如何获得相应的“索引/位置”并将其设置在条目中?
Entry [uid=user1, score=14, position=0]
Entry [uid=user2, score=8, position=0]
Entry [uid=user3, score=7, position=0]
Entry [uid=user4, score=7, position=0]
Entry [uid=user5, score=4, position=0]
Entry [uid=user6, score=3, position=0]
Entry [uid=user7, score=3, position=0]
Entry [uid=user8, score=1, position=0]
现在,user1 条目的 position=1,user2 条目的 position=2,依此类推。
【问题讨论】:
-
什么意思?您想用不同的位置值更新地图中的一个条目吗?我假设你想通过
uid找到它,对吧? -
编辑了问题 - 添加条目时,TreeMap 会自动对其进行排序。基于分数,但 Entry.position 应设置为条目在游戏板中的“排名/位置”
-
这样的东西在 jdk 中默认是不存在的,例如stackoverflow.com/questions/7911621/…
标签: java collections java-8