2016-12-29 2 views
0

Я уже отфильтровал группу объектов по определенной строке, введенной в EditText, и теперь мне нужно отсортировать этот список с положением указанной строки, как я могу это сделать?поиск и сортировка списка объектов

Я уже сделал это

фильтра Функция

public void setFilter(String query) { 
    visibleList = new ArrayList<>(); 
    query = query.toLowerCase(Locale.getDefault()); 
    for (AccountProfile accountProfile : accountProfileList) { 
     if (accountProfile.getName().toLowerCase(Locale.getDefault()) 
       .contains(query)) 
      visibleList.add(accountProfile); 
    } 

    Collections.sort(visibleList, new AccountNameComparator()); 


} 

AccountNameComparator

public class AccountNameComparator implements Comparator<AccountProfile> { 
@Override 
public int compare(AccountProfile first, AccountProfile second) { 
    return first.getName().compareTo(second.getName()); 
} 

}

список отсортирован, но он основан на getname() мне нужно сортировать список со специальной подстрокой getname()

+3

Просто измените метод сравнения, чтобы все, что вам нужно. –

ответ

1

Для sort that list with the position of the specified string, вы могли бы попробовать что-то вроде этого:

public class AccountNameComparator implements Comparator<AccountProfile> { 
    private final String query; 
    public AccountNameComparator(String query) { 
    this.query = query; 
    } 
    @Override 
    public int compare(AccountProfile first, AccountProfile second) { 
     Integer f = first.getName().indexOf(this.query); 
     Integer s = second.getName().indexOf(this.query); 
     return f.compareTo(s); 
    } 
} 
+1

Строка firstName = first.getName(). ToLowerCase(); Строка secoundName = second.getName(). ToLowerCase(); небольшие изменения, это сработало для меня. Спасибо –

0

Существует небольшое изменение в ответе выше: как показано ниже

public class AccountNameComparator implements Comparator<AccountProfile> { 
private final String query; 

public AccoluntNameSortComparator(String query) { 
    this.query = query; 
} 

@Override 
public int compare(AccountProfile first, AccountProfile second) { 
    String firstName = first.getName().toLowerCase(); 
    String secoundName = second.getName().toLowerCase(); 
    query = query.toLowerCase(); 
    Integer f = firstName.indexOf(query); 
    Integer s = secoundName.indexOf(query); 
    return f.compareTo(s); 
} 
} 
Смежные вопросы