Firebase 按降序对数据进行排序。 (只排序了一半。)

Posted

技术标签:

【中文标题】Firebase 按降序对数据进行排序。 (只排序了一半。)【英文标题】:Firebase sorting data in descending order. (only half sorted.) 【发布时间】:2018-05-21 01:47:16 【问题描述】:

我正在尝试按值将我的列表视图排序为降序。我试过使用 Collections.reverse(list);但我不知道为什么只有一半的列表按降序排序。下半部分按升序排列。

以下是我的代码:

com.firebase.client.Query Queryref = mRef.orderByValue().limitToLast(20);
Queryref.addChildEventListener(new com.firebase.client.ChildEventListener() 
    @Override
    public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) 
        String value = dataSnapshot.getValue(String.class);
        String boothname = dataSnapshot.getKey();
        list.add(new Booth(boothname, value));
        adapter.notifyDataSetChanged();

        Collections.reverse(list);
    

上面的代码允许我以升序显示前 20 个最高值。 但我希望它降序并尝试使用 Collections.reverse(); 但我收到的输出仅显示前 10 个降序数据。请帮忙:(

【问题讨论】:

【参考方案1】:

Doug 方法的另一种方法是将每个子项插入到列表的开头,而不是像现在这样添加到列表的末尾。

例如,如果您的list 变量是List,您可以在开头插入add(index, value)

list.add(0, new Booth(boothname, value));

【讨论】:

【参考方案2】:

在将每个 个子单独的子添加到列表后,您正在反转列表。这听起来根本不像最终会是一个排序列表。

您可能不想使用 ChildEventListener。使用 ValueEventListener 一次获取 所有 个子项,然后在完成后对它们进行排序。

【讨论】:

但我需要使用 ChildEventListener 因为子数据会不断变化。这是针对每次用户投票时子值都会改变的投票结果。所以列表必须根据子值按降序排列。 那么你需要手动对每个事件的整个列表进行排序。

以上是关于Firebase 按降序对数据进行排序。 (只排序了一半。)的主要内容,如果未能解决你的问题,请参考以下文章

在django模板中按降序对相关项目进行排序

按降序对数组进行排序的更好方法

按降序对int数组进行排序[重复]

如何按降序对 JSON 数组元素进行排序? [复制]

按降序对单链表进行排序

如何按降序对 ListView.builder 进行排序?