2010-10-15 4 views
2

J'ai un projet d'entraînement pour lequel j'ai besoin d'aide. C'est une classe MailServer simple. Voici le code:Java Iterate Over Collection

import java.util.ArrayList; 
import java.util.List; 
import java.util.Iterator; 
import java.util.HashMap; 
import java.util.TreeMap; 
import java.util.Collection; 
import java.util.Map; 

public class MailServer 
{ 
    private HashMap<String, ArrayList<MailItem>> items; 

    // mail item contains 4 strings: 
    // MailItem(String from, String to, String subject, String message) 

    public MailServer() 
    { 
     items = new HashMap<String, ArrayList<MailItem>>(); 
    } 

    /** 
    * 
    */ 
    public void printMessagesSortedByRecipient() 
    { 
     TreeMap sortedItems = new TreeMap(items); 

     Collection c = sortedItems.values(); 

     Iterator it = c.iterator(); 

     while(it.hasNext()) { 
      // do something 
     } 
    } 
} 

J'ai un HashMap qui contient une clé String (nom du destinataire du message) et la valeur contient un ArrayList du courrier pour ce destinataire particulier.

J'ai besoin de trier la HashMap et d'afficher le nom, l'objet de l'e-mail et le message de chaque utilisateur. J'ai des problèmes avec cette section.

Merci

Répondre

2

Vous êtes proche.

TreeMap sortedItems = new TreeMap(items); 

    // keySet returns the Map's keys, which will be sorted because it's a treemap. 
    for(Object s: sortedItems.keySet()) { 

     // Yeah, I hate this too. 
     String k = (String) s; 

     // but now we have the key to the map. 

     // Now you can get the MailItems. This is the part you were missing. 
     List<MailItem> listOfMailItems = items.get(s); 

     // Iterate over this list for the associated MailItems 
     for(MailItem mailItem: listOfMailItems) { 
      System.out.println(mailItem.getSomething()); 
      } 
     } 

Vous aurez quelques cochonneries pour nettoyer cependant - par exemple, le TreeMap sortedItems = new TreeMap(items); peut être améliorée.

+0

Wow, c'est génial. Merci de votre aide! –

+0

Hé, merci quand ça marche. Je ne l'ai pas compilé, probablement plein de fautes de frappe. –

+0

Comprenez-vous comment nous allons de treemap -> keyset -> entrée de carte appropriée -> liste -> MailItem? Pourquoi ai-je dit 'Liste ' au lieu de 'ArrayList '? –