【问题标题】:How to Sort List in Ascending Order by Firebase Childs (Numeric)?如何按 Firebase Childs(数字)按升序对列表进行排序?
【发布时间】:2017-12-07 21:21:28
【问题描述】:
ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                list = new ArrayList<>();
                for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){

                    Model userdetails = dataSnapshot1.getValue(Model.class);
                    Model listdata = new Model();

                    String name = userdetails.getName();
                    String points = userdetails.getPoints();

                    listdata.setName(name);
                    listdata.setPoints(points);
                    list.add(listdata);

                }

           try {
                Collections.sort(list, new Comparator<Model>() {
                    @Override
                    public int compare(Model lhs, Model rhs) {
                        int left = Integer.parseInt(rhs.getPoints());
                        int right = Integer.parseInt(lhs.getPoints());
                        return left - right;
                    }
                });
            } catch (Exception ignored){}

                Adapter recyclerview = new Adapter(list, getActivity());
                RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(getActivity());
                recycler.setLayoutManager(layoutmanager);
                recycler.setItemAnimator( new DefaultItemAnimator());
                recycler.setAdapter(recyclerview);

            }

这是我用于从 firebase 检索数据的代码。

下面是数据。

我想按升序但按点对数据进行排序。最大 该点将首先出现。

我已经发布了一个关于它的问题,它成功了,列表已排序,但在某些项目之后它变得未排序。

重要的是列表非常非常大。

我给你举个例子:

排序后,有些项目后来变得未排序。

任何人都可以帮助我吗?谢谢。

【问题讨论】:

    标签: android list arraylist firebase-realtime-database android-recyclerview


    【解决方案1】:

    试试这个

    Collections.sort(list, new Comparator<Model>() {
                    @Override
                    public int compare(Model lhs, Model rhs) {
                        int left = Integer.parseInt(rhs.getPoints());
                        int right = Integer.parseInt(lhs.getPoints());
                        return left - right;
                    }
                });
    

    替换为这个

    Collections.sort(list, new Comparator<Model>() {
                    @Override
          public int compare(Model o1, Model o2) {
                   return Integer.compare(o2.getPoints(), o1.getPoints());
       }
    });
    

    更新:

    Collections.sort(list, new Comparator<Model>() {
                        @Override
              public int compare(Model o1, Model o2) {
                       return Integer.compare(Integer.parseInt(o2.getPoints()), Integer.parseInt(o1.getPoints()));
           }
        });
    

    请设置异常见以下代码:设置断点并检查任何异常是否触发

    try {
          Collections.sort(list, new Comparator<Model>() {
              @Override
                  public int compare(Model o1, Model o2) {
                           return Integer.compare(Integer.parseInt(o2.getPoints()), Integer.parseInt(o1.getPoints()));
               }
            });
       } catch (Exception ignored){
            ignored.getStackTrace();
       }
    

    【讨论】:

    • 我认为你的点 var 是字符串,请查看我的更新答案
    • 还是一样。
    • 此代码出现异常或不检查我更新的答案
    • 没有改变。
    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多