HOWTO · Java
Java 関数で 2つの値を返す
この記事では、Java で 2つの値を返す方法を紹介します。
Java では、関数に 2つの値を返す特権はありません。複数値の戻りに伴う問題の解決は、出力を格納するユーザー定義クラスを作成するか、組み込みのデータ型を Array、Pair として使用することで解決できます(返す値が 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 は汎用データ型です。つまり、渡されるデータ型の形式をとることができます。この場合、文字列が渡されるため、T1 と T2 はタイプ 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>