Сортировка ArrayList <String>в древовидной карте - PullRequest
0 голосов
/ 21 января 2010

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

 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

это слово отсортировано

nextWord is not ..

Могу ли я использовать 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();
}
}

Ответы [ 3 ]

1 голос
/ 21 января 2010

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

0 голосов
/ 21 января 2010

Y Не пытайтесь что-нибудь подобное

Collections.sort (inputWords);

0 голосов
/ 21 января 2010
result.get(thisWord).add(nextWord);
Collections.sort(result.get(thisWord));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...