2010-01-21 4 views
0

Я пишу трубку в файле. Я отслеживаю пары слов из файла. Используя treemap все ключи отсортированы. Однако, когда я добавляю слова к этим ключам, они не сортируются. здесь часть я нужна помощь в функции процесса:Сортировка ArrayList <String> в TreeMap

private static void process(){ 


if(!result.containsKey(thisWord)){ 
      result.put(thisWord, new ArrayList<String>()); 

     } 

     // Add nextWord to the list of adjacent words to thisWord: 
     result.get(thisWord).add(nextWord); // nextword is not sorted within the key 

thisword сортируется

NextWord нет ..

Могу ли я использовать Collections.sort (результат); каким-то образом? Им просто не уверен, как я получаю следующий результат в результате, чтобы сделать это. или, нет ли способа сделать это в моей ситуации. Я бы предпочел не изменить ситуацию, если вы не порекомендуете ее.

Это программа

import java.util.Map.Entry; 
import java.util.TreeSet; 
import java.io.*; 
import java.util.*; 





public class program1 { 

private static List<String> inputWords = new ArrayList<String>(); 
private static Map<String, List<String>> result = new TreeMap<String, List<String>>(); 



public static void main(String[] args) { 


    collectInput(); 
    process(); 
    generateOutput(); 
} 


private static void collectInput(){ 
    Scanner  sc = new Scanner(System.in);  
    String  word; 


    while (sc.hasNext()) {      // is there another word? 
     word = sc.next();      // get next word 
     if (word.equals("---")) 
     { 
      break; 
      } 

     inputWords.add(word); 

     } 

} 

private static void process(){ 


    // Iterate through every word in our input list 
    for(int i = 0; i < inputWords.size() - 1; i++){ 

     // Create references to this word and next word: 
     String thisWord = inputWords.get(i); 
     String nextWord = inputWords.get(i+1); 


     // If this word is not in the result Map yet, 
     // then add it and create a new empy list for it. 
     if(!result.containsKey(thisWord)){ 
      result.put(thisWord, new ArrayList<String>()); 

     } 

     // Add nextWord to the list of adjacent words to thisWord: 
     result.get(thisWord).add(nextWord); // need to sort nextword 
     // Collections.sort(result); 

    } 

} 


private static void generateOutput() 
    { 

    for(Entry e : result.entrySet()){ 
     System.out.println(e.getKey() + ":"); 

     // Count the number of unique instances in the list: 
     Map<String, Integer> count = new HashMap<String, Integer>(); 
     List<String> words = (List)e.getValue(); 
     for(String s : words){ 
      if(!count.containsKey(s)){ 
       count.put(s, 1); 
      } 
      else{ 
       count.put(s, count.get(s) + 1); 
      } 
     } 

     // Print the occurances of following symbols: 
     for(Entry f : count.entrySet()){ 
      System.out.println("  " + f.getKey() + ", " + f.getValue()); 

     } 
    } 
    System.out.println(); 
} 
} 
+0

Я возглавляю карту карты, работаю хорошо, я не уверен, как я мог бы добавить файл на карту карты. – Steller

ответ

0
result.get(thisWord).add(nextWord); 
Collections.sort(result.get(thisWord)); 
+0

Мне нужно следующееWord отсортировано. – Steller

1

Если вы хотите коллекцию «NextWord» с отсортированный, почему бы не использовать TreeSet, а не ArrayList? Единственная причина, по которой я вижу это, - это иметь дубликаты. Если дубликаты разрешены, то да, используйте Collections.sort в ArrayList, когда вы закончите добавлять к ним. Или посмотрите в классах Apache Commons или Google collection - я не знаю их с головы, но я уверен, что есть отсортированный список, который позволяет дублировать в одном или обоих из них.

+0

Я не уверен, как я могу использовать TreeSet вместо арраиста? – Steller

+0

I TRIED: приватная статическая карта > result = new TreeMap >(); и result.put (thisWord, новый TreeSet ()); Когда я пытаюсь запустить программу, я получаю сообщение об ошибке: TreeSet нельзя отнести к списку. – Steller

+0

Вы пытаетесь придать результат result.get() в List. ? Это работает для меня: result.get (thisword) .add (nextword); – Nrj

0

Y ли вам не попробовать некоторые вещи, как этот

Collections.sort (inputWords);

+0

, потому что тогда он сортирует ключевое слово для следующего слова, а парные слова неверны – Steller

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