Java 関数で 2つの値を返す

Rashmi Patidar 2023年10月12日
  1. Java の ArrayList クラスを使用して複数の値を返す
  2. Java の Pair クラスを使用して 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>
著者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

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 Array