2015-06-23 3 views
0

Я пытаюсь сортировать массив (ads, типа ETstrain) одной из переменных экземпляра (distancefrom). Как я могу это сделать? Я попытался использовать компаратор, а затем функцию сортировки. Есть ли лучший способ/у меня есть логические ошибки?Сортировка Datastructures с использованием компаратора

abstract class distanceComparator implements Comparator<ETstrain> { 
    @Override 
    public int compare(ETstrain a, ETstrain b) { 
    return a.distancefrom < b.distancefrom ? -1 : a.distancefrom == b.distancefrom ? 0 : 1; 
     } 
} 

public static <ETstrain> void sort(ads[] a, 
     Comparator<ETstrain> b) 
+0

Ваш код выглядит хорошо меня. Однако я бы предложил использовать 'Integer.compare (a.distancefrom, b.distancefrom)' (или 'Float' /' Double.compare') или, если вы используете Java 8, используйте 'Comparator.comparing (ets -> ets.distancefrom) '. – aioobe

+0

просто верните a.distancefrom - b.distancefrom ... Simpler – ControlAltDel

+1

@ControlAltDel, это [ужасная идея] (http://ideone.com/zdjuU9). – aioobe

ответ

1

Просто попробуйте:

Arrays.sort(yourETStrainArray, distanceComparator); 

Если у вас есть список вместо массива, используйте:

Collections.sort(yourETStrainList, distanceComparator); 
+0

'Arrays.sort (ETstrain [] объявления, Компаратор distanceComparator);' дает мне Syntax ошибку на лексемы "рода", идентификатор ожидаемого после этого маркера и Синтаксис ошибки на лексемы "ETstrain", удалить этот маркер и 'Arrays.sort (ads, distanceComparator);' Ошибка синтаксиса на токене "(", удалить этот токен в обеих скобках –

0

Рабочий код:

public class distanceComparator implements Comparator<ETstrain> { 
    @Override 
    public int compare(ETstrain a, ETstrain b) { 
     return a.distancefrom < b.distancefrom ? -1 
       : a.distancefrom == b.distancefrom ? 0 : 1; 
    } 
    public <ETstrain> void sort(ETstrain[] ads, 
      Comparator<? super ETstrain> distanceComparator){ 
     Arrays.sort(ads, distanceComparator); 
    } 
} 
+0

частично благодаря @RoelStrolenberg –