2012-10-18 5 views
8

Ich habe eine Methode wie folgt, diese Methode enthält zwei arraylist ("eventList" und "emailList").Wie kann ich 2 ArrayList von der gleichen Methode

List<EmailUID> emailid=SharedEvent.getEmailUid(filter, uri, exchWD, EmailShare); 

public static List<EmailUID> getEmailUid(Filter filter, String uri, NexWebDav exchWD, 
      List<String> emailShare) 
List eventsToday = null; 
List<EmailUID> arrayList = new ArrayList<EmailUID>(); 
List<EmailUID> emailList = new ArrayList<EmailUID>(); 
List<EmailUID> eventList = new ArrayList<EmailUID>(); 

     for (String email : emailShare) { 
      String uris = uri + email + "/events/"; 
      InputStream stream = null; 
      try { 
       stream = exchWD.get(uris); 
       BufferedReader br = new BufferedReader(new InputStreamReader(stream)); 
       CalendarBuilder builder = new CalendarBuilder(); 
       net.fortuna.ical4j.model.Calendar calendar = builder.build(br); 

       //eventsToday.add(email); 

       eventsToday = (List<?>) filter.filter(calendar.getComponents(Component.VEVENT)); 
       arrayList=getEmailUID(eventsToday,email); 
       emailList.addAll(arrayList);// 
       eventList.addAll(eventsToday);// 

      } catch (ParserException e) { 
       LOGGER.error("Parse Exception"+e.getMessage()); 
      } finally { 
       IOUtils.closeQuietly(stream); 
      } 
     } 
    //return eventList; 
    return emailList; 
    } 

Wie sowohl die Liste „Eventlist“ und „Emaillist“

+0

Vielen Dank für die Antworten –

Antwort

10

Nun, wenn Sie wirklich haben, können Sie wickeln sie in ein Objekt, das nur 2 Listenfelder hat.

Alternativ können Sie eine Karte der 2 Listen mit jeweils einem eindeutigen Schlüssel zurückgeben.

13

Es ist nicht möglich, zwei return statement aus einzelner Funktion erhalten, aber Sie in neuen Map oder List wickeln können und zwei Arraylist zurückkehren können.

public Map<String,List<EmailUID>> getList() 
    List<EmailUID> emailList = new ArrayList<EmailUID>(); 
    List<EmailUID> eventList = new ArrayList<EmailUID>(); 
    ... 
    Map<String,List<EmailUID>> map =new HashMap(); 
    map.put("emailList",emailList); 
    map.put("eventList",eventList); 
    return map; 
} 
2

Erstellen Sie eine Liste von List<EmailUID> Objekte, das heißt List<List<EmailUID>>. Fügen Sie Ihre Listen (eventList und emailList) zu dieser Superliste hinzu. Und gib diese super Liste zurück.

Um evenlist später zuzugreifen, verwenden Sie diese superList.get(0); //refers to eventlist

(Gesetzt superList von Ihrer Methode zurückgegeben wurde, und evenlist ist das erste Element in dieser Liste):

2

Es gibt keine einfache Möglichkeit, dies in Java zu tun. Sie können eine kleine Wrapper-Klasse erstellen, die beide Elemente enthält. Sie können eine Liste beider Listen, eine Gruppe beider Listen oder eine Map> mit zwei Einträgen mit beiden Listen zurückgeben.

4

Sie können eine Klasse mit zwei Listen als Mitglied erstellen und dieses Klassenobjekt dann mit Ihren Listen zurückgeben.

1

Sie können sie einfach in einem Array zurückgeben.

public static List[] getEmailUid(Filter filter, String uri, NexWebDav exchWD, 
      List<String> emailShare) { 
    // 
    // Method body 
    // 
    return new List[] { eventList, emailList }; 

} 
2

Sie müssen die Signatur Ihrer Methode ändern. Ändern Sie den Rückgabetyp

ArrayList<String>[] 

ODER

ArrayList<ArrayList<String>> 

Basierend auf dem Rückgabetyp ausgewählt, den Code bearbeiten.

Wenn Array als Rückgabetyp ausgewählt wird, vor der Rückkehr Add folgenden Zeilen:

ArrayList<String>[] arr = new ArrayList<String>[2]; 
arr[0] = eventList; 
arr[1] = emailList; 
return arr; 

Ebenso können Sie Code für die 2. Option hinzufügen. Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.

Verwandte Themen