Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在RecyclerView中对项目进行排序?_Java_Android_Android Recyclerview - Fatal编程技术网

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

Java 如何在RecyclerView中对项目进行排序?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想在recyclerView中对项目进行排序。我有一些用户名,比如20ABC1、20ABC2、…、20ABC10等等 我尝试了相关问题的答案,其中一个问题是: public static final Comparator<Users> BY_NAME_ALPHABETICAL = (users, t1) -> users.Username.compareTo(t1.Username); publicstaticfinalcomparatorby_NAME_字母=(users

我想在recyclerView中对项目进行排序。我有一些用户名,比如20ABC1、20ABC2、…、20ABC10等等

我尝试了相关问题的答案,其中一个问题是:

public static final Comparator<Users> BY_NAME_ALPHABETICAL = (users, t1) -> users.Username.compareTo(t1.Username);
publicstaticfinalcomparatorby_NAME_字母=(users,t1)->users.Username.compareTo(t1.Username);
但这并不能完全解决问题。20ABC10,20ABC11,…20ABC19高于20ABC2。我认为这是因为它逐字检查

我能解决这个问题吗


谢谢:)

把这个放到你的适配器里

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();
    }
}
使用kotlin

val comp: Comparator<Users> = Comparator { o1, o2 -> o1.Username.trim().compareTo(o2.Username.trim()) }
Collections.sort(users, comp)
val comp:Comparator=Comparator{o1,o2->o1.Username.trim().compareTo(o2.Username.trim())}
Collections.sort(用户、公司)

对java也这样做

波希米亚人用这个答案解决了我的问题,他从字符串中删除了字母表,并比较了剩余的
int

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);
    }
});
Collections.sort(字符串,新比较器(){
公共整数比较(字符串o1、字符串o2){
返回extractInt(o1)-extractInt(o2);
}
int extractInt(字符串s){
字符串num=s.replaceAll(“\\D”和“);
//如果找不到数字,则返回0
返回num.isEmpty()?0:Integer.parseInt(num);
}
});
公共可观测getUsersWithBlogs(){
返回Observable.fromIterable(UserCache.getAllUsers())
.filter(user->user.blog!=null&&!user.blog.isEmpty())
.sorted((user1,user2)->user1.name.compareTo(user2.name));
}

非常感谢。我会尽快回来的。同样的问题。结果是20ABC1,20ABC10,20ABC2,20ABC3,20ABC4,20ABC5@AshishYadav尝试一下Collections.sort(mDataList)被否决,因为你没有解释你的代码做了什么。这应该可以解决问题。我认为你做错了什么。尝试使用lowercase()那么,根据您的解决方案,20ABC10或20ABC2应该是什么?对我来说,20ABC10出现了,这就是问题所在。否则,通常情况下,排序会很好地进行。可能重复的排序需要搜索自然排序。有比较器可用的实现。尽管@KaranMer您是正确的,请检查此项。但是波希米亚人的回答可以解决我的问题,我们不知道他是否在使用RxJava
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);
    }
});
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));
}