2012-10-18 29 views
8

Tôi có một phương thức như dưới đây, phương pháp này chứa hai arraylist ("eventList" và "emailList").Làm thế nào tôi có thể trả về 2 ArrayList Từ cùng một phương thức

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

Làm thế nào để có được cả hai danh sách "eventList" và "emailList"

+0

Cảm ơn mọi người về câu trả lời –

Trả lời

10

Vâng, nếu bạn thực sự phải, bạn có thể quấn chúng thành một đối tượng, chỉ có 2 trường Danh sách.

Thay thế, bạn có thể trả về Bản đồ của 2 danh sách, với khóa duy nhất cho mỗi danh sách.

13

Không thể hai return statement từ chức năng duy nhất nhưng bạn có thể bọc trong mới Map hoặc List và có thể trở lại hai 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; 
} 
2

Tạo danh sách các đối tượng List<EmailUID>, ví dụ: List<List<EmailUID>>. Thêm danh sách của bạn (eventListemailList) vào số siêu danh sách này. Và trả lại danh sách siêu này.

Để truy cập evenlist sau này, sử dụng này superList.get(0); //refers to eventlist

(Giả superList được trả về từ phương pháp của bạn và evenlist là mục đầu tiên trong danh sách đó):

2

Không có cách nào dễ dàng để thực hiện việc này trong Java. Bạn có thể tạo một lớp bao bọc nhỏ để chứa cả hai phần tử, bạn có thể trả về danh sách cả hai danh sách, một bộ gồm cả hai danh sách, hoặc một Bản đồ> chứa 2 mục với cả hai danh sách.

4

Bạn có thể tạo một lớp với hai danh sách làm thành viên và sau đó có thể trả về đối tượng lớp này cùng với danh sách của bạn.

1

Bạn chỉ có thể trả lại chúng trong một mảng.

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

} 
2

Bạn cần thay đổi chữ ký của phương pháp. Thay đổi kiểu trả về để

ArrayList<String>[] 

HOẶC

ArrayList<ArrayList<String>> 

Dựa trên các kiểu trả về lựa chọn, chỉnh sửa mã.

Nếu mảng được chọn là kiểu trả về, trước khi dòng trở lại add sau:

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

Tương tự như vậy, bạn có thể thêm mã cho lựa chọn thứ 2. Hãy cho tôi biết nếu bạn cần thêm trợ giúp.

Các vấn đề liên quan