4

1つのメソッドから2つの値を返す方法はありますか....

例:

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

私はこのメソッドをMy Serviceクラスに呼び出しています.StoringStartDateendDateDatabaseにここでこれらは2つの異なる列です

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

7 に答える 7

13

1 回のメソッド呼び出しで個別の構造を返すことはできませんが、それらの複合体を返すことはできます。たとえば、リストのリストを返すことが可能な解決策になります。

   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();取得できます。startDatetwoLists.get(0)endDatetwoLists.get(1)

于 2012-12-14T12:02:59.600 に答える
6

いいえ、メソッドから 2 つの値を返すことはできません。

最善の方法は、2 つのフィールドを持つカスタム クラスを作成し、そのオブジェクトを返すことです。

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;
}
于 2012-12-14T11:59:22.580 に答える
2

あなたはできる

  • 入力する引数として 1 つまたは両方のリストを指定します。
  • メソッドのインスタンスのフィールドである 2 つのリストがあり、getter を介してこれらにアクセスします。
  • 2 つのリストの配列またはリストのリストを返します。
  • 2 つのリストをラップするカスタム型を返します。フィールドを公開するだけで、ゲッターは使用しません。
  • 間隔の単一のリストを持つ

最後が最善の解決策だと思います。

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

      return intervals;
   }
}

Joda-time には、2 つの Date オブジェクトを作成するよりも効率的なIntervalクラスがありますが、独自のオブジェクトを作成することもできます。

于 2012-12-14T12:09:54.003 に答える
1

このようなカスタムクラスを作成できます

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

そのオブジェクトを返します。

于 2012-12-14T12:01:53.727 に答える
1

List2 つの の配列、または の のList配列を返すことをカウントしない限り、Listそれには正確に 2 つのエントリが含まれ、それぞれがどのような値を表すかを呼び出し元に理解してもらう必要があります。

それ以外は、いつでもPairクラスを作成してそれを使用できます。これは、戻り値の次元に関するその仮定への依存を取り除くため、より良いでしょう。Pair型が非常に多くの状況で役立つことがわかります。

于 2012-12-14T12:02:24.570 に答える
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);
       }
     }
   }
}
于 2014-06-30T11:42:29.007 に答える
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*/
    }  
}  

出力はこちら

ここに画像の説明を入力

于 2020-10-13T02:23:20.123 に答える