2010-01-21 8 views
0

Je passe un fichier dans un fichier. Je suis le suivi des paires de mots du fichier. À l'aide d'un treemap, les clés sont triées. Cependant, lorsque j'ajoute des mots à ces touches, ils ne sont pas triés. ici est la partie i besoin d'aide dans la fonction de processus:Tri d'une ArrayList <String> dans une 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 est trié

nextWord n'est pas ..

Puis-je utiliser Collections.sort (résultat); en quelque sorte? Im juste ne sais pas comment j'arrive à la NextWord dans le résultat pour le faire. ou, est-ce qu'il n'y a aucun moyen de le faire dans ma situation. Je préférerais ne pas changer les choses à moins que vous ne le recommandiez.

C'est le programme

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

Je dirige une carte de la carte fonctionnerait bien je ne suis pas sûr de savoir comment je pourrais ajouter un fichier à une carte de la carte .. – Steller

Répondre

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

J'ai besoin de nextWord triés. – Steller

1

Si vous voulez que la collection de s "nextword" trié, pourquoi ne pas utiliser un TreeSet plutôt que d'un ArrayList? La seule raison que je peux voir contre cela est si vous pourriez avoir des doublons. Si les doublons sont autorisés, alors oui, utilisez Collections.sort sur ArrayList lorsque vous avez fini de les ajouter. Ou regardez dans les classes de collection Apache Commons ou Google - je ne les connais pas du haut de ma tête, mais je suis sûr qu'il y a une liste triée qui permet des doublons dans un ou deux d'entre eux.

+0

Je ne sais pas comment je pourrais utiliser un TreeSet à la place de l'arraylist? – Steller

+0

I TRIED: private static Carte > resultat = new TreeMap >(); et result.put (thisWord, nouvel TreeSet ()); Lorsque j'essaie d'exécuter le programme, j'obtiens une erreur: TreeSet ne peut pas être converti en liste. – Steller

+0

essayez-vous de classer le result.get() en liste. ? Cela fonctionne pour moi: result.get (thisword) .add (nextword); – Nrj

0

Y Ne pas essayer quelque chose comme ça

Collections.sort (inputWords);

+0

car alors il trie le mot-clé au mot suivant et les mots appariés sont incorrects – Steller

Questions connexes