Java编程新手,无法找到答案。
我为我构建并管理的小游戏创建了一个Firebase数据库,以便正确存储分数。现在我想建立排名前十的排行榜。数据库本身以最高分数编制索引,我获得了前10个分数:
mDatabase.child(gameName).child("Score").limitToFirst(10).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get user value
HashMap<String,Long> topScores = (HashMap<String, Long>) dataSnapshot.getValue();
....
问题在于(从我所看到的)我收到的是一个HashMap,我存储在topScores中。同样,根据我的理解,到目前为止,HashMaps是无组织的,所以当你打印它时,它看起来像这样:
{DummyData1=0, try=0, dummy2=5, lalala=10, Name1=0, try2=0, lala=11, try3=0, la=3, dummy=1}
所以,没有明显的顺序。
最后,问题是你如何推荐我订购创建的HashMap,以便将Key和Value对存储在相应的TextView中(TextViews的第一行中的最佳得分手和最高分,依此类推) 。
As a reference, how I plan on showcasing the leaderboard
谢谢!
答案 0 :(得分:3)
你做错了两件事:
假设您在Score
下有这个JSON结构(请在下次提问时将JSON发布为文本):
Score
代码如下:
mDatabase.child(gameName).child("Score")
.orderByValue().limitToLast(10).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child: dataSnapshot.getChildren()) {
System.out.println(child.getKey()+"="+child.getValue(Long.class));
}
它会打印出来:
PUF = 30
Polarbear0106 = 42
KatoWulf = 60
答案 1 :(得分:1)
Sort a Map<Key, Value> by values (Java)
这将返回按值排序的新地图:(需要java 8)
public static <K, V extends Comparable<? super V>> Map<K, V>
sortByValue( Map<K, V> map )
{
Map<K, V> result = new LinkedHashMap<>();
Stream<Map.Entry<K, V>> st = map.entrySet().stream();
st.sorted( Map.Entry.comparingByValue() )
.forEachOrdered( e -> result.put(e.getKey(), e.getValue()) );
return result;
}