Как сортировать предметы в RecyclerView? - PullRequest
0 голосов
/ 16 апреля 2019

Я хотел отсортировать элементы в recyclerView. У меня есть имена пользователей, такие как 20ABC1, 20ABC2, ..., 20ABC10, .. и т. Д.

Я попробовал ответить на связанные вопросы, один из которых был:

public static final Comparator<Users> BY_NAME_ALPHABETICAL = (users, t1) -> users.Username.compareTo(t1.Username);

Но это точно не решает проблему. 20ABC10, 20ABC11, ... 20ABC19 выше 20ABC2. Я думаю, что это потому, что он проверяет символ за символом.

Как я могу решить это?

Спасибо:)

Ответы [ 4 ]

1 голос
/ 16 апреля 2019
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));
}
1 голос
/ 16 апреля 2019

Моя проблема была решена с помощью этого ответа Сортировка строк, содержащих число в Java , по Богемскому, где он удалил алфавиты из строк и сравнил оставшиеся 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);
    }
});
0 голосов
/ 16 апреля 2019

Используя kotlin,

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

Сделайте то же самое для Java.

0 голосов
/ 16 апреля 2019

вставь это в свой адаптер

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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...