HOWTO · Java

Java 関数で 2つの値を返す

この記事では、Java で 2つの値を返す方法を紹介します。

Java では、関数に 2つの値を返す特権はありません。複数値の戻りに伴う問題の解決は、出力を格納するユーザー定義クラスを作成するか、組み込みのデータ型を ArrayPair として使用することで解決できます(返す値が 2つしかない場合))、HashMap および String Array

Java の ArrayList クラスを使用して複数の値を返す

以下は、3つ以上の値を返す Java 関数を示す小さなコードブロックです。

import java.util.ArrayList;
import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    ArrayList<String> list = callFunction();
    list.forEach(System.out::println);
  }

  private static ArrayList<String> callFunction() {
    return new ArrayList<>(Arrays.asList("Hi", "Hello"));
  }
}

上記のコードでは、Java の戻り機能を理解するためのメソッドが定義されています。callFunction メソッドは、main 関数またはドライバークラスから呼び出されます。JavaReturnTwoValues クラス専用です。

関数定義では、ArrayList オブジェクトは最初に 2つの値でインスタンス化されます。値は、パブリッククラスコンストラクターで許可されます。Arrays.asList() 関数を使用すると、インラインインスタンス化が可能になるため、宣言時に値を定義できます。

静的 asList メソッドは、パラメーターとして指定された定義済みリストを返します。return キーワードは、その後に常に 1つのパラメーターを受け入れます。複数のパラメータが指定されている場合、コンパイル時エラーの問題がスローされます。

関数からの値は、list ローカル変数に保存されます。ローカル変数に対して、forEach() メソッドが呼び出されます。この指定されたメソッドは、単一の accept プロセスを持つ機能インターフェイスである Consumer インスタンスを取ります。これは、値またはクラスのみを消費し、何も返さないことを意味します。

したがって、ステートメントはリストインスタンスから要素を順番に出力し、forEach メソッドは要素を使用してコンソールに値を出力します。::はメソッド参照演算子であり、ラムダ式 a-> System.out.println(a) に似ています。

上記のコードブロックの出力を以下に示します。

Hi Hello World

Java の Pair クラスを使用して 2つの値を返す

以下は、ユーザー定義の Pair クラスを使用してその機能を理解するコードブロックです。

public class Main {
  public static void main(String[] args) {
    Pair<String, String> pair = callPairFunction();
    System.out.println(pair.getKey() + " " + pair.getValue());
  }

  private static Pair<String, String> callPairFunction() {
    return new Pair<String, String>("Key", "I am value");
  }
}

class Pair<T1, T2> {
  private final T1 key;
  private final T2 value;

  public Pair(T1 first, T2 second) {
    this.key = first;
    this.value = second;
  }

  public T1 getKey() {
    return key;
  }

  public T2 getValue() {
    return value;
  }
}

上記のプログラムでは、2つのクラスが定義されています。1つは main またはドライバー関数を保持するパブリッククラスで、もう 1つはペアの機能を内部的に説明するユーザー定義の Pair クラスです。

ドライバークラスには、関数と値の操作プロセスを呼び出すためのコードがあります。callPairFunction は、Pair ユーザー定義データ型を返すプライベートメソッドです。クラスは、キーとその値である値のペアを格納するように宣言されます。

メインクラスの下には、ユーザー定義クラス Pair<T1, T2> があります。これは、Java の Generics の概念として一般的に定義され、機能します。パラメータ T1 および T2 は汎用データ型です。つまり、渡されるデータ型の形式をとることができます。この場合、文字列が渡されるため、T1T2 はタイプ String になります。

このクラスには、渡された値を使用してローカル変数をインスタンス化するパブリックコンストラクターがあります。パブリックの getKey メソッドと getValue メソッドを使用すると、コンストラクターでインスタンス化された後にキーと値が返されます。

callPairFunction メソッドでは、新しいキーワードを使用して Pair クラスのインスタンスが返されます。このステートメントは、クラスのパブリックコンストラクターを呼び出し、キー変数と値変数を設定します。返されたインスタンスは、Pair クラスの左側と右側の値を取得するために使用されます。

以下は、上記のコードで定義された出力です。

Key I am value

特に、org.apache.commons.lang3.tuple パッケージは、使用するための同様の組み込みクラスも提供します。ペアは、値を処理するための既存の関数と操作を保持するパッケージに存在するクラスです。

多くの場合、事前定義されたクラスを使用して、面倒なコードの記述を回避し、新しい Pair クラスを作成するオーバーヘッドを回避できます。プロジェクトに注入する依存関係を次に示します。

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-configuration2</artifactId>
            <version>2.7</version>
</dependency>