Devolver dos valores en la función Java

Rashmi Patidar 12 octubre 2023
  1. Devolver varios valores usando la clase ArrayList en Java
  2. Devolver dos valores usando la clase Pair en Java
Devolver dos valores en la función Java

En Java, no existe el privilegio de devolver dos valores a una función. La resolución del problema que viene con las devoluciones de valores múltiples se puede resolver creando una clase definida por el usuario para almacenar la salida o utilizando tipos de datos integrados como Array, Pair (si solo hay dos valores para devolver ), HashMap y String Array.

Devolver varios valores usando la clase ArrayList en Java

A continuación se muestra el pequeño bloque de código para demostrar las funciones de Java que devuelven más de dos valores.

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"));
  }
}

En el código anterior, se define un método para comprender la funcionalidad de devolución en Java. El método callFunction se llama desde la función main o clase de controlador; es privado para la clase JavaReturnTwoValues.

En la definición de la función, un objeto ArrayList se instancia inicialmente con dos valores. Los valores están permitidos en el constructor de clases públicas. El uso de la función Arrays.asList() permite la creación de instancias en línea, por lo tanto, definir los valores en el momento de la declaración.

El método estático asList devuelve una lista definida especificada como parámetros. La palabra clave return siempre acepta un solo parámetro después de ella. Si se especifica más de un parámetro, arroja problemas de error en tiempo de compilación.

Los valores de la función se conservan en la variable local lista. Sobre la variable local, se llama al método forEach(). Este método especificado toma una instancia de Consumer, una interfaz funcional con un único proceso de accept. Significa que solo consume valores o clases y no devuelve nada.

Entonces, la declaración emite los elementos secuencialmente desde la instancia de la lista, y el método forEach consume los elementos para imprimir los valores en la consola. El :: es un operador de referencia de método y es similar a una expresión lambda, a-> System.out.println(a).

La salida del bloque de código anterior se muestra a continuación.

Hi Hello World

Devolver dos valores usando la clase Pair en Java

A continuación se muestra el bloque de código que utiliza la clase Pair definida por el usuario para comprender su funcionalidad.

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

En el programa anterior, hay dos clases definidas: una es la clase pública que contiene la función main o del controlador, y la otra es la clase Pair definida por el usuario para ilustrar la funcionalidad del par internamente.

La clase de controlador tiene un código para llamar a la función y al proceso de manipulación de valores. callPairFunction es un método privado que devuelve un tipo de datos Pair definido por el usuario. La clase se declara para almacenar un par de valores que es la clave y su valor.

Debajo de la clase principal hay una clase definida por el usuario, Pair<T1, T2>. Se define genéricamente como y trabaja sobre el concepto de Generics en Java. Los parámetros T1 y T2 son tipos de datos genéricos, lo que significa que pueden tomar la forma del tipo de datos que se pasa. En nuestro caso, se pasa la cadena, por lo que T1 y T2 pasan a ser del tipo String.

La clase tiene un constructor público que instancia las variables locales con los valores pasados. Usando los métodos públicos getKey y getValue, la clave y el valor se devuelven después de ser instanciados en el constructor.

En el método callPairFunction, se devuelve una instancia de la clase Pair utilizando una nueva palabra clave. La declaración invoca al constructor público de la clase y establece las variables clave y de valor. La instancia devuelta se usa para recuperar los valores en los lados izquierdo y derecho de la clase Pair.

A continuación se muestra la salida definida en el código anterior.

Key I am value

En particular, el paquete org.apache.commons.lang3.tuple también proporciona una clase incorporada similar para su uso. Pair es una clase presente en el paquete que contiene funciones y operaciones existentes para trabajar en los valores.

A menudo, se puede usar una clase predefinida para evitar escribir el código engorroso y tener la sobrecarga de crear una nueva clase Pair. La dependencia para inyectar en el proyecto se muestra aquí.

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-configuration2</artifactId>
            <version>2.7</version>
</dependency>
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

Artículo relacionado - Java Function

Artículo relacionado - Java Array