我如何从同一方法返回2 ArrayList

时间:2012-10-18 05:23:39

标签: java arraylist

我有一个方法如下,这个方法包含两个arraylist(“eventList”和“emailList”)。

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;
    }

如何同时获取列表“eventList”和“emailList”

8 个答案:

答案 0 :(得分:17)

单个函数中不可能有两个return statement,但您可以换入新的MapList并返回两个ArrayList。

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;
}

答案 1 :(得分:12)

如果你真的需要,你可以把它们包装成一个只有2个List字段的对象。

另外,您可以返回2个列表的地图,每个列表都有一个唯一的键。

答案 2 :(得分:4)

您可以创建一个以两个列表作为其成员的类,然后可以使用您的列表返回此类对象。

答案 3 :(得分:2)

创建List<EmailUID>个对象的列表,即List<List<EmailUID>>。 将您的列表(eventListemailList)添加到此超级列表。并返回此超级列表。

要稍后访问evenlist,请使用此superList.get(0); //refers to eventlist

(假设您的方法已返回superList,而evenlist是该列表中的第一项):

答案 4 :(得分:2)

在Java中没有简单的方法可以做到这一点。您可以创建一个包含两个元素的小包装类,您可以返回两个列表的列表,一组列表或一个Map&gt;包含两个列表的两个条目。

答案 5 :(得分:2)

您可以将它们以数组形式返回。

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

}

答案 6 :(得分:2)

您需要更改方法的签名。将返回类型更改为

ArrayList<String>[] 

OR

ArrayList<ArrayList<String>>

根据所选的返回类型,编辑代码。

如果选择数组作为返回类型,则在返回之前添加以下行:

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

同样,您可以为第二个选项添加代码。如果您需要进一步的帮助,请告诉我。

答案 7 :(得分:-1)

公共静态列表getData() {

/ *其他实现的代码* /

返回Arrays.asList(List1,list2);

}