Java 如何在RecyclerView中对项目进行排序?
我想在recyclerView中对项目进行排序。我有一些用户名,比如20ABC1、20ABC2、…、20ABC10等等 我尝试了相关问题的答案,其中一个问题是: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
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));
}