如何按降序对地图条目的键值进行排序?

我对 Java 比较陌生,使用比较器的整个排序让我有点困惑。


是否可以在不使用比较器的情况下按降序对下面代码的当前输出进行排序?


或者有没有更简单的方法让我理解如何对所述值进行排序。


myRef.addChildEventListener(new ChildEventListener() {

    @Override

    public void onChildAdded(@NonNull DataSnapshot dataSnapshot , String s) {

        Map<String, Object> userInfo = (Map<String, Object>)dataSnapshot.getValue();

        String username = (String) userInfo.get("username");


        Map<String, Long> steps = (Map<String, Long>) userInfo.get("steps");


        long existingSteps = 0;

        for (Map.Entry<String, Long> step : steps.entrySet()) {

            existingSteps += Long.valueOf(step.getValue());

        }


        arrayList.add(new String( username + "  -  " + "steps:  " + existingSteps));


        arrayAdapter = new ArrayAdapter<>(Leaderboard.this , 

        android.R.layout.simple_list_item_1 , arrayList);


        listView.setAdapter(arrayAdapter);

}

此代码的当前输出是:


John Doe I - Steps: 79

John Doe II - Steps: 111

John Doe III - Steps: 0

John Doe IV - Steps: 88

John Doe V - Steps: 12

John Doe VI - Steps: 0

是否可以让此代码运行以下输出:


John Doe II - Steps: 111

John Doe IV - Steps: 88

John Doe I - Steps: 79

John Doe V - Steps: 12

John Doe III - Steps: 0

John Doe VI - Steps: 0

数据库结构


HUWWW
浏览 115回答 1
1回答

动漫人物

我能想到的最简单的解决方案是在每个用户对象下添加总步数作为新属性。在这种情况下,您还需要做一件事,即根据您每天获得的步数增加该属性。您的新架构应如下所示:Firebase-root&nbsp; |&nbsp; --- user&nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp;--- userId&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --- steps&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; --- //daily steps&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --- target: 100&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --- username: "John Doe I"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --- totalNumberOfSteps: 111要根据totalNumberOfSteps属性按(升序)顺序排列用户,请使用以下代码行:DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();DatabaseReference userRef = rootRef.child("user");Query query = userRef.orderByChild("totalNumberOfSteps");ValueEventListener valueEventListener = new ValueEventListener() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onDataChange(DataSnapshot dataSnapshot) {&nbsp; &nbsp; &nbsp; &nbsp; for(DataSnapshot ds : dataSnapshot.getChildren()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String username = ds.child("username").getValue(String.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; long totalNumberOfSteps = ds.child("totalNumberOfSteps").getValue(Long.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d(TAG, username + " - Steps: " + totalNumberOfSteps);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onCancelled(@NonNull DatabaseError databaseError) {&nbsp; &nbsp; &nbsp; &nbsp; Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!&nbsp; &nbsp; }};query.addListenerForSingleValueEvent(valueEventListener);然后按降序排列,请从以下帖子中查看我的回答:如何按升序或降序排列firebase数据库数据?最后,logcat 中的结果将是:John Doe II - Steps: 111John Doe IV - Steps: 88John Doe I - Steps: 79John Doe V - Steps: 12John Doe III - Steps: 0John Doe VI - Steps: 0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java