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:
- JavaTuples permite un máximo de 10 tuplas. Las clases para cada uno son:
For 1 element - Unit<A> For 2 elements - Pair<A, B> For 3 elements - Triplet<A, B, C> For 4 elements - Quartet<A, B, C, D> For 5 elements - Quintet<A, B, C, D, E> For 6 elements - Sextet<A, B, C, D, E, F> For 7 elements - Septet<A, B, C, D, E, F, G> For 8 elements - Octet<A, B, C, D, E, F, G, H> For 9 elements - Ennead<A, B, C, D, E, F, G, H, I> For 10 elements - Decade<A, B, C, D, E, F, G, H, I, J>
- JavaTuples también proporciona las 2 clases de tupla de 2 elementos muy comunes equivalentes a Pair:
KeyValue<A, B> LabelValue<A, B>
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
- 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);
- 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.
Métodos en JavaTuples
La biblioteca JavaTuples tiene muchas funciones que ayudan con su fácil funcionamiento. Estos son:
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 con el número de parámetros y la clase Tuple correspondiente con valores, según sea necesario.
Obtener valores de JavaTuples
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