2009-05-09 4 views
1

Просто небольшая проблема с Arraylist. Я хочу сортировать ArrayList<Client> по названию.Как реализовать Компаратор с использованием Generics?

Class Client{ String name; int phonenumber ..} 

Этого код делает работу, но я имею предупреждение компилятора: «использует или небезопасные операции». В чем проблема?

public void sortByName(){ 
    Collections.sort(ListofClients, new NameComparator()); 
} 

Мой компаратор выглядит следующим образом:

public class NameComparator implements Comparator{ 
    public int compare(Object client1, Object client) { 
    String name1 = ((Client) client1).getName(); 
    String name2 = ((Client) client2).getName(); 

    return name1.toUpperCase()).compareTo(name2.toUpperCase(); 
    } 
} 

Если я использую «implements Comparator<Client>» я получаю ошибку: «NameComparator не абстрактный и не переопределяет абстрактный метод сравнения (клиент, клиент) в java.util.Comparator. это мой компаратор не так? извините за это нуб вопрос, новый для Java

+0

сразу возвращает результат :) – willcodejavaforfood

+0

@bruno Обратите внимание, что ваш компаратор не обрабатывает нулевые имена. – McDowell

+0

Почему это должно быть, если действительный объект Client не может иметь нулевое имя. –

ответ

11

После implement Comparator<Client> вам нужно изменить:

public int compare(Object client1, Object client) 
{ 
    ... 
} 

к этому

public int compare(Client client1, Client client) 
{ 
    // Now you don't have to cast your objects! 
} 

это все потому, что определение компаратора

public interface Comparator<T> 
{ 
    public compare(T o1, T o2); 
} 

Обратите внимание, как отображается общий параметр T в имени метода.

IDE, такой как Eclipse/Netbeans/IntelliJ, поможет в этой ситуации.

+0

Большое спасибо, это сработало! – 2009-05-09 14:16:07

3

Я полагаю, ваш список клиентов типа

List<Client> 

в этом случае ваш компаратор должен быть типа Comparator<Client> и выполнить соответствующее сравнение (по имени, в данном случае)

Смежные вопросы