10

我有一个方法如下,这个方法包含两个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”

4

8 回答 8

23

单个函数不可能有两个return statement,但您可以包装新的Map,或者List可以返回两个 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;
}
于 2012-10-18T05:25:12.570 回答
13

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

或者,您可以返回 2 个列表的 Map,每个列表都有一个唯一的键。

于 2012-10-18T05:26:16.853 回答
4

您可以创建一个具有两个列表作为其成员的类,然后可以将这个类对象与您的列表一起返回。

于 2012-10-18T05:26:47.687 回答
3

您可以将它们返回到一个数组中。

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

}
于 2012-10-18T05:28:15.617 回答
2

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

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

(假设superList从您的方法返回并且evenlist是该列表中的第一项):

于 2012-10-18T05:26:01.060 回答
2

在 Java 中没有简单的方法可以做到这一点。您可以创建一个包含两个元素的小型包装类,您可以返回两个列表的列表、两个列表的集合或包含两个列表的 2 个条目的 Map>。

于 2012-10-18T05:26:26.300 回答
2

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

ArrayList<String>[] 

或者

ArrayList<ArrayList<String>>

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

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

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

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

于 2012-10-18T05:29:55.497 回答
-1

公共静态列表 getData() {

/*其他实现代码*/

返回 Arrays.asList(List1, list2);

}

于 2020-03-02T05:07:14.647 回答