2016-04-13 2 views
0

Я пытаюсь инвертировать массив списка голосов, чтобы уступить предпочтение (т. Е. Голос 2,4,1,3, после инвертированного 3,1,4,2. индексированное предпочтение - 3). Я считаю, что это можно сделать с помощью Collections, но список имеет разностный тип (тип Vote). Просто нужно руководствоваться тем, как я мог бы сортировать этот порядок предпочтений, когда я не могу использовать методы Collections на Vote.Неверная попытка инвертировать список массивов

public Vote invertVote() { 

     VoteList invVote = (VoteList) ((Vote) vote).copyVote(); 

     Iterator<Integer> iter = invVote.iterator(); 
      while(iter.hasNext()){ 
      iter.next(); 
      Collections.reverse(invVote); 

    } 


    return invVote; 


} 

Примечание. Голосование представляет собой набор целых чисел, представляющих единый голос. VoteList реализует голосование. copyVote() используется для создания глубокой копии голосования, чтобы не изменять его и возвращать новый объект Vote. Все еще застряла ошибка во время Collections.reverse (invVote)

+2

Значит, у вас есть '' ArrayList ''? Где проблема с использованием '' Collections.reverse (list) ''? – f1sh

+0

Сортировка или реверс? Для сортировки связанных вопросов начинайте с этого ответа: http://stackoverflow.com/a/2477334/133645 – reto

+0

Попытка, которая дает «метод reverse (list), неприменим для аргументов (Голосование). Попытка в конечном счете взять список integers (ArrayList) и вернуть его как тип Vote (инвертированная версия arraylist) – Abjilla22

ответ

2

Да, это можно сделать с помощью коллекции вам просто нужно вызвать метод Collections.reverse ...

public static void reverse(List<?> list) 

Меняет порядок элементов в указанном списке.

Этот метод работает в линейном режиме.

Пример:

public static void main(String[] args) { 
    Random rnd = new Random(); 
    List<Integer> myInteger = new ArrayList<Integer>(); 
    for (int i = 0; i < 10; i++) { 
     myInteger.add(rnd.nextInt(10)); 
    } 
    // the list 
    System.out.println(myInteger); 
    // the list sorted 
    Collections.sort(myInteger); 
    System.out.println(myInteger); 
    // the list inverted 
    Collections.reverse(myInteger); 
    System.out.println(myInteger); 
} 

в вашем случае использовать класс Голоса вместо целого и сделать класс для реализации сравнимого интерфейса, где вы определяете сортировочную логику ....

+0

Вы должны добавить, что для сортировки требуется, чтобы общий список списка был 'Comparable' и переопределяет метод compareTo() ' – SamTebbs33

+0

nice point ... спасибо за комментарий –

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