有没有办法从一个方法返回两个值....
示例:
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
我正在将此方法调用到我的服务类中,并在此处将StartDate
和endDate
存储到数据库中这些是两个不同的列
**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
答案 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)
你可以
我相信最后一个是最好的解决方案。
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)
直接,不,除非你计算返回一个包含两个List
或List
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*/
}
}
此处是输出