2014-11-29 4 views
-6
private SortedSet<Entry<String,Integer>> getSortedSet(Map<String, Integer> dictionary) { 
    SortedSet<Entry<String,Integer>> sorted = 
      new TreeSet<Entry<String,Integer>>(new Comparator<Entry<String,Integer>>() { 
       @Override 
       public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2) { 
        if(e1.getValue() > e2.getValue()) { 
         return -1; 
        } 
        else if(e1.getValue() == e2.getValue()) { 
         return e1.getKey().compareTo(e2.getKey()); 
        } 
        else return 1; 
       } 
       }); 
    sorted.addAll(dictionary.entrySet()); 
    return sorted; 
} 

Таким образом, мне был дан этот код для объяснения. Я знаю, что делают каждый из таких компонентов, как отсортированный набор, набор деревьев и компаратор, но я не уверен, как он работает, когда он собран. Я получаю, что getSortedSet - это метод, но где я смущаюсь, что происходит после него? Является ли SortedSet «отсортированным» здесь другим методом внутри метода getSortedSet, который для меня не имеет смысла. Я был бы очень признателен, если бы кто-нибудь мог объяснить это мне подробно. БлагодаряМожет ли кто-нибудь объяснить мне этот код, пожалуйста,

+3

Может пройти через код с некоторыми примерами данных и посмотреть, что он делает? –

+0

Сортирует записи в «Карте» с помощью компаратора. –

+0

Вы когда-нибудь писали Java-код с коллекциями? –

ответ

0

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

class Value { 
    int number; 
    String name; 
} 

private SortedSet<Value> getSortedSet(List<Value> inputList) { 

    Comparator<Value> comparator = new Comparator<Value>() { 
     public int compare(Value o1, Value o2) { 
      int compare = Integer.compare(o1.number, o2.number); 
      if (compare == 0) { 
       compare = o1.name.compareTo(o2.name); 
      } 
      return compare; 
     } 
    }; 

    SortedSet<Value> sorted = new TreeSet<>(comparator); 

    for (Value value : inputList) { 
     sorted.add(value); 
    } 

    return sorted; 
} 
  • dictionary.entrySet(), как inputList коллекция вещей этот метод стремится поставить в отсортированный набор.
  • С Entry/Value имеет более 1 свойства, компаратор сравнивает 1 сначала, и если это то же самое, возвращается к сравнению второго. «Сортировка по номеру, затем название»
  • Метод представляет собой TreeSet в качестве конкретной реализации для интерфейса SortedSet.
  • Как только это будет построено, все, что нужно сделать, это добавить все значения из исходной коллекции. Метод addAll является лишь сокращением для расширенного цикла for-each.

sorted - это только локальная переменная с действительно длинным объявлением и назначением типа. Существует даже объект-компаратор, созданный «на лету» в пределах одного большого заявления.

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