2013-11-21 1 views
1

Я получил список с некоторыми узлами дерева и хочу его отсортировать. В качестве компаратора я использую двойную переменную, принадлежащую каждому узлу в Списке.Сравнение узлов с Collections.sort

Thats мой код:

List<TreeNode<String>> list = inputNode.getChildren(); 

for(TreeNode<String> childNode : list) 
    { 
    Collections.sort(list, childNode.costs); 
    } 

TreeNode определяется следующим образом:

public class TreeNode<T> { 

public T data; 
public double costs; 
public List<TreeNode<T>> children; 

// Bunch of getters and setters 
} 

То, что я пытаюсь сделать это, сортировать (по убыванию) Перечень дочерних узлов. Я не хочу писать что-то новое, что уже есть. Так почему я не могу использовать Collections.sort?

Collections.sort Не является double сопоставимым типом данных?

ответ

1

Вы должны использовать его несколько иначе.

Либо TreeNode должен реализовать Comparable http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html, либо написать компаратор как анонимный класс.

public class TreeNode<T> implements Comparable { 

public T data; 
public double costs; 
public List<TreeNode<T>> children; 

// Bunch of getters and setters 

public int compareTo(TreeNode that) { return (int)(this.cost - that.cost); } 
} 

или

Collections.sort(ls, new Comparator() 
         { 

         public int compare(Object o1, Object o2) 
         { 
          //typecast and compare here 
         } 
         }  
       ); 

И не называйте Collections.sort в цикле. Достаточно одного вызова.

+0

Я попытался реализовать весь вид в 'TreeNode', но не работал. Я буду использовать метод compareTo. спасибо – Alika87

0

У вас есть два варианта здесь: 1) делают класс TreeNode реализовать Comparable < < TreeNode T >> и реализовать метод CompareTo, 2) Создать компаратор < < TreeNode T >> и использовать Collections.sort (список, компаратор);

0

Возможно, я ошибаюсь, но не должен TreeNode<T> сам инструмент сравнения? А затем вы можете сравнить значения на узле?