为了账号安全,请及时绑定邮箱和手机立即绑定

如何对 RecyclerView 中的项目进行排序?

如何对 RecyclerView 中的项目进行排序?

函数式编程 2022-10-07 17:52:10
我想对 recyclerView 中的项目进行排序。我有诸如 20ABC1、20ABC2、...、20ABC10、..等的用户名。我已经尝试了相关问题的答案,其中之一是:public static final Comparator<Users> BY_NAME_ALPHABETICAL = (users, t1) -> users.Username.compareTo(t1.Username);但这并不能完全解决问题。20ABC10, 20ABC11,...20ABC19 高于 20ABC2。我认为这是因为它逐个字符地检查。有什么办法可以解决这个问题?谢谢 :)
查看完整描述

4 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

我的问题通过使用这个答案解决了我的问题Sorting Strings that contains number in Java by Bohemian 他从字符串中删除了字母并比较了剩余的ints

Collections.sort(strings, new Comparator<String>() {

    public int compare(String o1, String o2) {

        return extractInt(o1) - extractInt(o2);

    }


    int extractInt(String s) {

        String num = s.replaceAll("\\D", "");

        // return 0 if no digits found

        return num.isEmpty() ? 0 : Integer.parseInt(num);

    }

});




查看完整回答
反对 回复 2022-10-07
?
撒科打诨

TA贡献1934条经验 获得超2个赞

public Observable<User> getUsersWithBlogs() {

return Observable.fromIterable(UserCache.getAllUsers())

.filter(user -> user.blog != null && !user.blog.isEmpty())

.sorted((user1, user2) -> user1.name.compareTo(user2.name));

}


查看完整回答
反对 回复 2022-10-07
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

使用科特林,


val comp: Comparator<Users> = Comparator { o1, o2 -> o1.Username.trim().compareTo(o2.Username.trim()) }

Collections.sort(users, comp)

对 java 做同样的事情。


查看完整回答
反对 回复 2022-10-07
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

把它放在你的适配器里


void sortByName(boolean isDescending) {

    if (mDataList.size() > 0) {

        Collections.sort(mDataList, new Comparator<Users>() {

            @Override

            public int compare(Users object1, Users object2) {

                if (isDescending)

                    return object2.getUsername().toLowerCase().compareTo(object1.getUsername().toLowerCase().trim());

                else

                    return object1.getUsername().toLowerCase().compareTo(object2.getUsername().toLowerCase().trim());

            }

        });

        notifyDataSetChanged();

    }

}

然后像这样使用它:


adapter.sortByName( true||false );


查看完整回答
反对 回复 2022-10-07
  • 4 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信