Java Tuplas | Introducción

tupla

La palabra «tupla» significa «una estructura de datos que consta de varias partes». Por lo tanto, las tuplas se pueden definir como una estructura de datos que puede contener múltiples valores y estos valores pueden o no estar relacionados entre sí.

Ejemplo:

[Geeks, 123, *@]

En este ejemplo, los valores de la tupla no están relacionados en absoluto entre sí. “Geeks” es una palabra que tiene un significado. “123” son números. Mientras que «*@» son solo un grupo de caracteres especiales. Por lo tanto, los valores de una tupla pueden o no estar relacionados entre sí.

JavaTuple

JavaTuples es una biblioteca de Java que ofrece clases, funciones y estructuras de datos para trabajar con tuplas. Es una de las bibliotecas Java más simples jamás creadas.

JavaTuples ofrece las siguientes clases para trabajar:

Nota: Para ejecutar el programa JavaTuples, se debe agregar la biblioteca org.javatuples en el IDE. El IDE puede ser Netbeans, Eclipse, etc. Descargue la biblioteca JavaTuples Jar aquí. Para agregar una biblioteca en Netbeans, consulte esto.

Las características básicas de JavaTuples son:

  • son seguros para tipos
  • son inmutables
  • son iterables
  • son serializables
  • They are Comparable (implementa Comparable<Tuple>)
  • Implementan equals() y hashCode()
  • También implementan toString()

¿Por qué preferir JavaTuples sobre Lists/Arrays?

Piense en un escenario en el que desee almacenar los detalles de un estudiante en una sola entidad, como Nombre, Número de registro, Nombre del padre, Número de contacto. Ahora, el enfoque más común que viene a la mente es construir una estructura de datos que tome los campos según sea necesario. Aquí es donde entran en juego las tuplas. Con Tuples, no es necesario crear ninguna estructura de datos separada. En cambio, para este escenario, se puede usar simplemente un Cuarteto<A, B, C, D>.

Por lo tanto, estructuras de datos comunes como List, Array:

  • Solo puede ser de un tipo específico.
  • Puede ser de infinitos elementos.

Mientras que las tuplas:

  • Pueden ser de cualquier tipo, pero son typesafe
  • Puede ser de un número limitado solamente, de 1 a 10
    • Métodos en JavaTuples

      La biblioteca JavaTuples tiene muchas funciones que ayudan con su fácil funcionamiento. Estos son:

      deArray() fromCollection() de Iterable() con() añadirAtX() agregar()
      comparar con() es igual() contiene() contieneTodo() obtenerTamaño() código hash()
      Enstringr() aArray() índice de() últimoÍndiceDe() obtenerValorX() obtenerValor()
      establecerAtX() eliminarDeX() obtener la clave() establecerClave() obtenerEtiqueta() coloca una etiqueta()
      valor ajustado()

      Creación de tuplas Java

      Nota : Los siguientes ejemplos se muestran como un enfoque genérico. Se pueden usar para cualquiera de JavaTuple reemplazándolos nortecon el número de parámetros y la clase Tuple correspondiente con nortevalores, según sea necesario.

      • Del Constructor :

        Sintaxis :

        NthTuple<type 1, type 2, .., type n> nthTuple = new NthTuple
                        <type 1, type 2, .., type n>(value 1, value 2, .., value n);
        

        Ejemplo :

        Pair<Integer, String> pair = new Pair<Integer, String>( 
                                      Integer.valurOf(1), "Geeks");
           
        Sextet<Integer, String, Integer, String, Integer, String> sextet
                                   = new Sextet<Integer, String, Integer, 
                                                 String, Integer, String>(
                                                     Integer.valueOf(1), "Geeks",
                                                     Integer.valueOf(2), "For",
                                                     Integer.valueOf(3), "Geeks"
                                                     );
      • Usando el método with() :

        Sintaxis :

        NthTuple<type 1, type 2, .., type n> nthTuple 
            = NthTuple.with(value 1, value 2, .., value n);
        

        Ejemplo :

        Pair<Integer, String> pair = Pair.with(Integer.valurOf(1), "Geeks");
          
        Sextet<Integer, String, Integer, String, Integer, String> sextet
            = Sextet.with(Integer.valueOf(1), "Geeks",
                          Integer.valueOf(2), "For",
                          Integer.valueOf(3), "Geeks");
      • De otras colecciones :

        Sintaxis :

        NthTuple<type, type, .., type> nthTuple 
                 = NthTuple.fromCollection(collectionWith_n_values);
        

        Ejemplo :

        Pair<String, String> pair = Pair.fromCollection(collectionWith2Values);
          
        Sextet<Integer, String, Integer, String, Integer, String> sextet
            = Sextet.fromCollection(collectionWith6Values);

      Obtener valores de JavaTuples

      • Sintaxis :
        NthTuple<type 1, type 2, .., type n> nthTuple = new NthTuple
                        <type 1, type 2, .., type n>(value 1, value 2, .., value n);
        typeX valX = nthTuple.getValueX-1();
        
      • Ejemplo :

        Pair < Integer, String >
        pair = new Pair<Integer, String>(Integer.valurOf(1), "Geeks");
           
        // This will set val2 = "Geeks"
        String val2 = pair.getValue1();
           
        Sextet<Integer, String, Integer, String, Integer, String> sextet
            = new Sextet<Integer, String, Integer, String, Integer, String>(
                                                Integer.valueOf(1), "Geeks",
                                                Integer.valueOf(2), "For",
                                                Integer.valueOf(3), "Geeks"
                                                );
           
        // This will set val5 = 3
        Integer val5 = sextet.getValue4();

        Nota :

        • La numeración de valores comienza con el índice 0. Por lo tanto, para el valor n, el captador será getValue n-1()
        • El objeto NthTuple solo puede tener getValue 0() a getValue n-1() captadores válidos (por ejemplo, Sextet no tiene un método getValue6()).
        • Todos los captadores getValueX() tienen seguridad de tipos, es decir, no se necesita conversión. Debido a la parametrización de tipo de las clases de tupla (el “ ” en Triplet ), el compilador sabrá que value0 es de tipo A, value1 de tipo B, y así sucesivamente.
        • También existe un método getValue(int pos) , pero no se recomienda su uso , ya que el compilador no puede conocer el tipo de resultado de antemano y, por lo tanto, se necesitará una conversión:

          Triplet<String, Integer, Double> triplet = …

          Integer intVal = (Integer) triplet.getValue(1);

      • Las clases KeyValue y LabelValue tienen sus métodos getValue0()/getValue1() renombrados como getKey()/getValue() y getLabel()/getValue() , respectivamente.

      Establecer valores de JavaTuples

      Dado que JavaTuples son inmutables , significa que no es posible modificar un valor en cualquier índice.
      Por lo tanto, JavaTuples ofrece setAtX (valor) que crea una copia de la Tupla con un nuevo valor en el índice X y devuelve esa Tupla.

      Sintaxis :

NthTuple<type 1, type 2, .., type n> nthTuple = new NthTuple
                <type 1, type 2, .., type n>(value 1, value 2, .., value n);
nthTuple = nthTuple.setAtX(val);

Ejemplo :

Pair<Integer, String> pair = new Pair<Integer, String>(
                            Integer.valueOf(1), "Geeks");
   
pair = pair.setAt1("For"); // This will return a pair (1, "For")
   
Sextet<Integer, String, Integer, String, Integer, String> sextet
    = new Sextet<Integer, String, Integer, String, Integer, String>(
                                        Integer.valueOf(1), "Geeks",
                                        Integer.valueOf(2), "For",
                                        Integer.valueOf(3), "Geeks"
                                        );
   
// This will return sextet (1, "Geeks", 2, "For", 3, "Everyone")
Sextet<Integer, String, Integer, String, Integer, String> otherSextet
    = sextet.setAt5("Everyone");

Iterando valores JavaTuple

Todas las clases de tupla en javatuples implementan la interfaz Iterable<Object> . Significa que se pueden iterar de la misma manera que las colecciones o los arreglos.

Ejemplo :

Triplet<String, Integer, Double> triplet = ...... 
  
for (Object value : tuple)
{
    ...
}

Publicación traducida automáticamente

Artículo escrito por RishabhPrabhu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *