是否可以在Java中的一个方法中返回两个ArrayList值?

时间:2012-12-14 11:58:49

标签: java collections return

有没有办法从一个方法返回两个值....

示例:

public Class Sample
{
  public List<Date> returnTwoArrayList()
   {
      List<Date> startDate=new ArrayList<Date>();

      List<Date> endDate=new ArrayList<Date>();

     //So I want to Return Two values startDate and endDate ...It is Possible????
   }
}

Edit:1

我正在将此方法调用到我的服务类中,并在此处将StartDateendDate存储到数据库中这些是两个不同的列

**StartDate      endDate**
2012-12-01     2012-12-05
2012-12-01     2012-12-15
2012-12-02     2012-12-10
2012-12-20     2012-12-25
2012-12-25     2012-12-31

7 个答案:

答案 0 :(得分:13)

无法通过一次方法调用返回单独的结构,但您可以返回它们的复合。例如,返回列表列表可能是一种解决方案:

   public List<List<Date>> returnTwoArrayList()
   {
      List<Date> startDates = new ArrayList<Date>();
      List<Date> endDates = new ArrayList<Date>();

      List<List<Date>> result = new ArrayList<List<Date>>();
      result.add(startDates);
      result.add(endDates);

      return result;
   }

您可以稍后使用get()方法检索这些列表。 假设您已经拨打了List<List<Date>> twoLists = returnTwoArrayList();这样的电话 您可以通过startDate致电twoLists.get(0)endDate twoLists.get(1) {{1}}

答案 1 :(得分:6)

不,你不能从方法中返回两个值。

最好的方法是创建一个包含两个字段的自定义类并返回该对象。

class ObjectHolder{
    private List<Date> startDate=new ArrayList<Date>();
    private List<Date> endDate=new ArrayList<Date>();

    <getter & setter method>
}

和 -

public ObjectHolder returnTwoArrayList(){
    ObjectHolder oh = new ObjectHolder();
    List<Date> startDate=new ArrayList<Date>();
    oh.setStartDate(startDate);
    List<Date> endDate=new ArrayList<Date>();
    oh.setEndDate(endDate);
    return oh;
}

答案 2 :(得分:2)

你可以

  • 提供一个或两个列表作为填充参数。
  • 有两个列表,它们是方法实例的字段,并通过getter访问它们。
  • 返回两个列表或列表列表的数组。
  • 返回包装两个列表的自定义类型。我不会使用getter,只是将字段公开。
  • 只有一个间隔列表

我相信最后一个是最好的解决方案。

public class Sample {
  public List<Interval> returnListOfStartToEndDates() {
      List<Interval> intervals=new ArrayList<>();

      return intervals;
   }
}

Joda-time有一个Interval类,它比创建两个Date对象更有效,但你也可以自己创建。

答案 3 :(得分:1)

你可以像这样创建一个自定义类

TimeSpan(ArrayList<Date> startDate, ArrayList<Date> endDate)

并返回该Object。

答案 4 :(得分:1)

直接,不,除非你计算返回一个包含两个ListList List Pair的数组的数组,并且对调用者说明它将包含两个条目以及每个人所代表的价值。

除此之外,你总是可以编写一个Pair类并使用它,这会更好,因为它消除了对返回值维度的假设依赖性,你会发现{{{1}} 1}}类型在许多情况下派上用场。

答案 5 :(得分:1)

相反,你可以像以下一样使用Map,

public Map<String, List<Date>> getBothDates() {
  List<Date> startDate = new ArrayList<Date>();
  List<Date> endDate = new ArrayList<Date>();
  Map<String, List<Date>> bothDates = new HashMap<String, List<Date>>();
  bothDates.put("startDate", startDate);
  bothDates.put("endDate", endDate);    
  return bothDates;
}

要获取两个日期,请简单地迭代地图,

public void printBothDates() {
   Map<String, List<Date>> bothDates = getBothDates();
   for(Entry<String, List<Date>> entry : bothDates.entrySet()) {
     if(StringUtils.equalsIgnoreCase("startDate", entry.getKey())) {
       for(Date d : entry.getValue()) {
          System.out.println("startDate---"+d);
       }
     } else if(StringUtils.equalsIgnoreCase("endDate", entry.getKey())) {
       for(Date d : entry.getValue()) {
          System.out.println("endDate---"+d);
       }
     }
   }
}

答案 6 :(得分:0)

import java.util.ArrayList;

public class MyClass {
    public ArrayList<ArrayList> TwoArrayList() {

        ArrayList cars = new ArrayList();
        cars.add("Volvo");
        cars.add("BMW");
        cars.add("Ford");
        cars.add("Mazda");

        ArrayList fruits = new ArrayList();
        fruits.add("Apple");
        fruits.add("Mango");
        fruits.add("Banana");
        fruits.add("Orange");

        ArrayList <ArrayList> twoArrayList = new ArrayList <ArrayList>();
        twoArrayList.add(cars);
        twoArrayList.add(fruits);

        return twoArrayList;

    }

    public static void main(String[] args) {
       MyClass obj = new MyClass();

        ArrayList <ArrayList> Arlist= obj.TwoArrayList();
        
        System.out.println(Arlist.get(0));/**FIRST ARRAY LIST*/
        
        System.out.println(Arlist.get(0).get(0));/**FIRST ARRAY LIST FIRST Element*/

        System.out.println(Arlist.get(1));/**SECOND ARRAY LIST*/
        
        System.out.println(Arlist.get(1).get(0));/**SECOND ARRAY LIST FIRST Element*/
    }  
}  

此处是输出

enter image description here