10

以下のようなメソッドがあります。このメソッドには 2 つの配列リスト (「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

単一の関数から2 つを作成することはできませんreturn statementが、new でラップするMapList、2 つの 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

本当に必要な場合は、それらを 1 つのオブジェクトにまとめることができます。このオブジェクトには 2 つの List フィールドしかありません。

または、それぞれに一意のキーを持つ 2 つのリストのマップを返すこともできます。

于 2012-10-18T05:26:16.853 に答える
4

メンバーとして 2 つのリストを持つクラスを作成し、このクラス オブジェクトをリストと共に返すことができます。

于 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>>。リスト (eventListおよびemailList) をこのスーパー リストに追加します。そして、このスーパーリストを返します。

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

選択した戻り値の型に基づいて、コードを編集します。

戻り値の型として配列が選択されている場合は、return の前に次の行を追加します。

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

同様に、2 番目のオプションのコードを追加できます。さらにサポートが必要な場合はお知らせください。

于 2012-10-18T05:29:55.497 に答える