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>
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn関連記事 - Java Function
- Java でブールメソッドを返す
- Java で無名関数を作成する
- Java の共変の戻り値の型
- Java の関数から何も返さない
- Java の仮想関数
- Java エラーInvalid Method Declaration; Return Type Required を修正