Ud 03
Ud 03
Ud 03
Utilización de las
librerías básicas de Java
ÍNDICE
3 3.1 3.2 3.3 3.4
¿Qué es
un paquete?
Un paquete es un conjunto de clases,
lógicamente relacionadas entre sí, agrupadas
bajo un nombre, incluso un paquete puede
contener otros paquetes.
J AVA
util awt
Principales paquetes de clases
Cómo crear
una librería en JAVA
Una clase de Java se puede almacenar en un archivo jar (Java Archive).
Las clases en un archivo jar se almacenan en un formato comprimido,
como un archivo zip. Un archivo jar es un contenedor portátil de clases.
https://drive.google.com/file/d/1BscK5WTMvRTq-G4i_c7WZaKMV9Zq5izu/preview
Principales paquetes de clases
Una clase interna tiene acceso a todas las variables y métodos de su clase
externa y puede referirse a ellos directamente de la misma manera que lo
hacen otros miembros no estáticos de la clase externa.
TIPOS:
https://drive.google.com/file/d/1_yt1fAcX2-QevqUzhpw7qF4wt8OarExz/view
Principales paquetes de clases
¿Cómo se crean
los objetos?
LAS CLASES SE UTILIZAN PARA CREAR OBJETOS.
HAY QUE UTILIZAR UN OPERADOR new.
H E R R A M I E N TA
JAVADOC
PA R A D O C U M E N TA R D E M A N E R A R Á P I DA Y
SENCILLA LAS CLASES Y MÉTODOS
JAVADOC A
C O M E N TA R I O S F O R M ATO DISTINTOS
NIVELES
Principales paquetes de clases
JAVADOC
C O M E N TA R I O S
EJEMPLO:
// Este es un comentario de una sola línea
/*
* Este es un comentario normal de varias líneas
*/
/**
* Este es un Javadoc
*/
JAVADOC
F O R M ATO
JAVADOC
A DISTINTOS
NIVELES A nivel de clase El ejemplo muestra una breve descripción y dos
etiquetas de bloque diferentes:
JAVADOC
A DISTINTOS
NIVELES A nivel de campo
/**
* El nombre público de un héroe que es de conocimiento común
*/
private heroName;
JAVADOC
A DISTINTOS
NIVELES A nivel de método
JAVADOC
A DISTINTOS
NIVELES A nivel variables
EJEMPLO:
/**
* Frase corta descriptiva
* Descripción de la variable.
* Valores válidos (si aplica)
* Comportamiento en caso de que sea null (si aplica)
*/
3.2 Clases básicas
para gestión de
cadenas y
funciones
numéricas
C O M E N Z A R
Clases básicas para gestión de cadenas y funciones numéricas
Ejemplo
char [] cadena = nex char [40];
Ejemplo
En el ejemplo observamos
char [] cadena = nex char [40]; cómo se define la variable
int i = 0, car; cadena como una matriz de
try caracteres de longitud 40, y a
{ continuación establece un bucle
System.out.print ("Introducir un texto: "); para leer los caracteres que
while ((car = System.in.read()) != ‘\r‘ && i < cadena.length) tecleamos hasta que se
{ completa la matriz.
cadena[i] = (char) car;
i++; Cada carácter leído se almacena
} en el siguiente elemento libre
System.out.println("Texto introducido: " + cadena);
de cadena.
System.out.println("Longitud del texto: " + i);
Por último, vemos el contenido
System.out.println("Dimensión de la matriz: " + cadena.length);
de cadena, el número de
}
caracteres almacenados y la
catch(IOException ignorada) {} dimensión de la matriz.
Clases básicas para gestión de cadenas y funciones numéricas
La clase String
P E R T E N E C E A L PAQ U E T E java.lang.
Un objeto String representa una cadena de caracteres que no se puede modificar, por lo tanto las
operaciones no modificarán el objeto original sino que devolverán uno nuevo.
String ofrece métodos para examinar caracteres individuales de una cadena de caracteres, comparar
y copiar cadenas, buscar y extraer subcadenas, convertir cadenas a minúsculas o mayúsculas.
Operador +
EJEMPLO:
Ya sabemos que todas las clases tienen al menos un método predeterminado que se
llama igual que ella y que debemos invocar para crear un objeto, es lo que conocemos
con el constructor de la clase.
La clase String proporciona varias formas de su constructor String, una para crear un
objeto String a partir de un literal, otra para crearlo a partir de otro String, etc…
Ejemplo
String strl = "abc"; //crea un String "abc"
String str2 = new String("def"); //crea un String "def"
String str3 = new String(strl); //crea un nuevo String "abc"
Este método nos permite saber si una cadena está en orden alfabético antes
que otra, comparando las cadenas carácter por carácter.
Ejemplo
String str1 = "abcde", str2 = "abcdefg";
if (str1.compareTo(str2) <0)
System.out.println(str1);
Clases básicas para gestión de cadenas y funciones numéricas
int length()
Devuelve el número de caracteres del objeto String
que recibe el mensaje de length.
Ejemplo
String str1 = "La provincia de Madrid es muy bonita";
System.out.println("Longitud: " + str1.length());
String toLowerCase()
Con este método se convierten las letras mayúsculas
del objeto String en minúsculas.
Ejemplo
String S1 = new String("MAYÚSCULA CONVERTIDA EN MINÚSCULA");
// Convertir a LowerCase
System.out.println(S1.toLowerCase());
Clases básicas para gestión de cadenas y funciones numéricas
String toUpperCase()
Al contrario que el anterior, este método convierte las
letras minúsculas en mayúsculas.
Ejemplo
String S1 = new String("minúsculas convertidas en mayúsculas");
// Convertir a UpperCase
System.out.println(S1.toUpperCase());
Clases básicas para gestión de cadenas y funciones numéricas
String trim
En este caso, este método devuelve un objeto String resultado
de eliminar los espacios en blanco que pueda haber al principio
y al final del objeto String que recibe el mensaje trim.
Ejemplo
String sCadena = " Esto Es Una Cadena" ;
System.out.println(sCadena.trim()); //Devuelve "Esto Es Una Cadena"
Clases básicas para gestión de cadenas y funciones numéricas
Ejemplo
int contador = 0;
String sInicio = "ca";
String sTexto;
Scanner reader = new Scanner(System.in);
System.out.println("Escribe palabras que empiecen por '" + sInicio + "'");
sTexto = reader.next();
while(sTexto.startsWith("ca")) {
System.out.println("Correcto... " + sTexto);
contador++;
System.out.println("Dime otra palabra...");
sTexto = reader.next();
}
Clases básicas para gestión de cadenas y funciones numéricas
En este caso, devuelve un valor true si el sufijo especificado coincide con el final del
objeto String que recibe el mensaje endsWith.
Ejemplo
public class EmailsAcabadosEnDotCom {
public static void main(String[] args) {
String emails[] =
{"[email protected]","[email protected]","[email protected]","[email protected]","[email protected]",
"[email protected]","[email protected]","[email protected]","[email protected]"};
String substring
Este método devuelve un nuevo String que encapsula una
subcadena de la cadena almacenada por el objeto String.
Ejemplo
String str1 = " abcdefgh ", str2 = "";
str1 = str1.trim();
if (str1.endsWith("gh"))
str2 = str1.substring(0, str1.length() - "gh".length());
Clases básicas para gestión de cadenas y funciones numéricas
Ejemplo
double pi = Math.PI;
String str1 = String.valueOf(pi);
Clases básicas para gestión de cadenas y funciones numéricas
Un objeto Stringbuffer
E S U N O B J E TO M O D I F I C A B L E E N C O N T E N I D O Y E N TA M A Ñ O
StringBuffer
StringBuffer insert
StringBuffer delete
StringBuffer replace
Clases básicas para gestión de cadenas y funciones numéricas
StringBuffer([arg])
Este método permite crear un objeto de la clase
Stringbuffer. Existen 3 formas de invocarlo:
StringBuffer([arg])
Según lo que muestran estos ejemplos, entendemos que:
Ejemplo
StringBuffer strb = new StringBuffer("Mes de del año ");
strb.insert("Mes de ".length(), "Mayo "); // "Mes de ".length ()=7
strb.append(2022);
Utilizamos este método para eliminar los caracteres que hay entre las
posiciones p1 y p2 del objeto StringBuffer que recibe el mensaje delete.
Ejemplo
StringBuffer strb = new StringBuffer("Mes de del año ");
strb.insert(7, "Mayo ");
strb.append(2022);
strb.delete(7, 13);
strb.insert(7, "Junio ");
Vemos cómo se elimina la subcadena “Mayo” del objeto strb y se añade en su misma
posición la cadena “Junio”.
Utilizamos este método para eliminar los caracteres que hay entre
las posiciones p1 y p2 del objeto StringBuffer que recibe el
mensaje replace, por los caracteres especificados por str.
Ejemplo
StringBuffer strb = new StringBuffer("Mes de del año ");
strb.insert(7, "Mayo ");
strb.append(2022);
strb.replace(7, 12, "Junio ");
System.out.println(strb);
La clase StringTokenizer
Pe r m i t e r e a l i z a r a n á l i s i s l ex i c o g r á f i c o s s o b r e c a d e n a s
de caractereres, devolviendo subcadenas de la misma,
(tokens) divididas mediante varios delimitadores, los
c ua l e s s e pue d e n pe r s ona l iz a r, o c a mb ia r s e g ún s e v a n
obteniendo tokens de la cadena.
Clases básicas para gestión de cadenas y funciones numéricas
CLASE StringTokenizer
Constructores
StringTokenizer (String cadena);: devuelve un StringTokenizer que
divide la cadena con los delimitadores por defecto: espacio, tabulador, nueva
línea, retorno de carro y avance de página.
Acciones
PA R A A N A L I Z A R U N string:
1 2 3
Ejemplo
// Crea un tokenizer que separa por comas una frase
StringTokenizer tokenizer = new StringTokenizer("Prueba a leer cadenas, " +
"siempre que estén separadas por comas, sin devolver los delimitadores"
,",");
while(tokenizer.hasMoreTokens()){ Según el ejemplo se imprimirá
System.out.println(tokenizer.nextToken()); por pantalla una sentencia,
} separándola por las comas.
Clases básicas para gestión de cadenas y funciones numéricas
Ejemplo 1
Ejemplo 2
Encuentra la última aparición de la cadena “Hola” dentro de: "Hola mundo ,Hola amigo".
Ejemplo 3
Ejemplo 4
Da la vuelta a la cadena: "abcdef"
Ejemplo 5
Da la vuelta a la cadena: "Curso de Java!",
pero sin utilizar StringBuffer.
Ejemplo 6
Ejemplo 7
Forma la frase: "Hola querido alumno de Java", a partir de las cadenas: "Hola", "querido",
"alumno" y "de Java", por dos métodos diferentes.
System.out.println(cadena1 + " " + cadena2 + " " + cadena3 + " " + cadena4);
result.append(cadena1);
result.append(" ");
result.append(cadena2);
result.append(" ");
result.append(cadena3);
result.append(" ");
result.append(cadena4);
System.out.println(result);
Clases básicas para gestión de cadenas y funciones numéricas
Ejemplo 8
Forma la frase: "Hola mundo", a partir de las cadenas: "Hola" y
"mundo", por un método diferente a los dos del ejercicio anterior.
String s = "Hola";
s = s.concat(" ");
s = s.concat("mundo");
System.out.print(s);
Ejemplo 9
Pon en mayúsculas la frase: "esta frase va en mayúsculas".
Ejemplo 10
Observa las siguientes transformaciones de cadenas:
Ejemplo 11
Imprime el código Unicode del carácter 5 en la frase: "Bienvenido al curso de Java ".
System.out.println("v".codePointBefore(1));
System.out.println(test_string.charAt(4));
Funciones numéricas
Las funciones numéricas en Java se refieren a un
conjunto de métodos y clases que se utilizan para
realizar operaciones aritméticas como la adición, la
multiplicación, la división y el cálculo del resto.
Estas funciones se proporcionan en la clase Math.
La clase Math contiene métodos para ejecutar
operaciones numéricas elementales tales como raíz
cuadrada, exponencial, logaritmo, y funciones
trigonométricas.
Clases básicas para gestión de cadenas y funciones numéricas
Ejemplo
raíz_cuadrada = Math.sqrt(n);
Ejemplo Math.abs()
// absVal es igual a 10
Ejemplo Math.pow()
int base = 2;
int exponente = 3;
¡Vamos a verlo!
3.3 Manipulación y
formato de
fechas.
Operaciones de
entrada-salida
C O M E N Z A R
Manipulación y formato de fechas. Operaciones de entrada -salida
Java Calendar
Ejemplo:
La clase Java Calendar se utiliza para SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");
representar y manipular fechas y horas. Esta String date = sdf.format(new Date());
clase proporciona métodos para convertir System.out.println(date); //27/01/2023
entre diferentes representaciones de fechas,
y para realizar operaciones aritméticas
sobre ellas. Uno de los usos más comunes Salida:
es calcular la fecha de hoy o la fecha de 27/01/2023
mañana a partir de la fecha actual.
Manipulación y formato de fechas. Operaciones de entrada -salida
Ejemplo:
LocalDate date = LocalDate.now();
Java Time System.out.println(date);
Salida:
Las dos expresiones crearán objetos de tipo LocalDate con la fecha 27-01-2023.
Manipulación y formato de fechas. Operaciones de entrada -salida
LocalTime:
Almacena una hora sin fecha. Es interesante si queremos almacenar por
ejemplo una hora de apertura o cierre.
LocalDateTime:
Almacena una fecha y una hora.
Ejemplo:
LocalDateTime dateTime = LocalDateTime.now();
Joda-time
Es una biblioteca gratuita y Open Source.
Es fácil de usar y fácil de extender ya que
admite múltiples sistemas de calendario
a través de un sistema conectable basado
en la clase Chronology.
La biblioteca está diseñada para
proporcionar toda la funcionalidad
necesaria para los cálculos de fecha y
hora.
Dispone de cálculos de zona horaria actualizados y de un conjunto
completo de pruebas para desarrolladores que garantiza la calidad de
la biblioteca.
Hay una Guía completa de usuario que proporciona respuesta a las
cuestiones más planteadas por los desarrolladores.
3.4 Gestión de
colecciones.
Trabajando con
streams Java.
Flujos y ficheros
C O M E N Z A R
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Una colección
ES UN OBJETO QUE REPRESENTA UN GRUPO DE OBJETOS
E N J AVA C O N TA M O S C O N
Sintaxis
[modif_clase] class NombreClase <IdentTipo> {
// Implementación de la clase
}
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Ejemplo para la clase Paquete que contiene dos instancias de una clase concreta habría
que declararla de la siguiente manera:
Ejemplo
public class Paquete <T> {
T primero;
T segundo;
public Paquete(T primero, T segundo){
this.primero = primero;
this.segundo = segundo;
}
public T getPrimero(){
El identificador T que hemos
return this.primero; utilizado en el ejemplo para
} referirnos a la variable de tipo
en la declaración, es el
public T getSegundo(){ parámetro de tipo formal.
return this.segundo; Puede ser cualquier
} identificador siempre que siga
las reglas de nombrado de Java.
}
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
IDENTIFICADORES DE UNA
InterfazGenerica
Ejemplo
public interface InterfazGenerica <T> {
// contenido de la interfaz
}
ClaseGenerica
Ejemplo
public class ClaseGenerica <T> implements InterfazGenerica <T> {
// contenido de la clase
}
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
El uso de genéricos Por ejemplo, vamos a declarar una clase nueva PaqueteDual
que contenga dos objetos de dos clases distintas:
N O E STÁ L I M I TA D O A U N T I P O
POR CLASE.
Ejemplo
Podemos declarar dos variables de tipo, public class PaqueteDual <T,U> {
o mas, en la declaración de la misma, T primero;
utilizando diferentes identificadores. U segundo;
public T getPrimero(){
return this.primero;
}
public U getSegundo(){
return this.segundo;
}}
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Paquete<String> paqueteDeCadenas;
Ejemplo
[modif_método] <IdentTipo> tipoRetorno nombreMétodo (args) {
// implementación
}
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Las colecciones
UNO DE LOS USOS MÁS COMUNES DE LOS GENÉRICOS
DEFINICIÓN
Las colecciones son un conjunto de clases que aportan
! funcionalidad específica a la hora de almacenar múltiples
instancias de cualquier otra clase, ofreciendo diferentes
estructuras de datos de tamaño dinámico como arrays,
pilas, colas, tablas hash, etc.
Interfaz Collection<E>. Define una funcionalidad Si las clases que utilizamos implementan esta interfaz,
genérica para cualquier colección como el método para se pueden recorrer de una manera estándar,
añadir nuevos elementos, add(E e). independientemente del tipo de clase que sean.
Otras interfaces
EXTIENDEN A ÉSTA:
La interfaz Iterable<E>
SE UTILIZA ÚNICAMENTE PARA DEFINIR CONJUNTOS DE VALORES
QUE PUEDAN SER RECORRIDOS.
Podemos implementar un método similar que utilice la colección como un raw type, empleando instancias
de Object en lugar de instancias de la clase concreta que contiene la colección:
Ejemplo palabras.add("supercalifragilisticuespialidoso");
// Añadir más elementos
while (palabras.remove("carro")){
// Borrar todas las ocurrencias de cierta palabra
// No hacen falta más acciones
}
String[] arrayPalabras = new String[1];
arrayPalabras = palabras.toArray(arrayPalabras);
// El array se usa si caben los elementos
// Si no se devuelve uno nuevo
La interfaz Set<E>
S E U T I L I Z A PA R A R E P R E S E N TA R CO N J U N TO S .
LO S M A PA S S O N CO N J U N TO S D E
OBJETOS, LLAMADOS VALORES,
QUE TIENEN ASOCIADOS UNA
CLAVE QUE LOS IDENTIFICA.
Hashtable<K,V>
E S L A I M P L E M E N TAC I Ó N D E U N A TA B L A hash.
Esta tabla hash realiza el acceso a los elementos por medio de su clave.
Esta clase implementa una tabla hash de tipo abierto, en la que si los
hash de varias claves colisionan, sus correspondientes valores se
alojan bajo el mismo punto de entrada.
Esta clase no permite que las claves o los valores sean nulos, y está
sincronizada para permitir un acceso concurrente a sus métodos.
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Ejemplo
Hashtable<String,String> tabla = new Hashtable<String,String>();
tabla.put("nombre", "Francisco Sánchez");
tabla.put("dirección", "C/ La Fresa S/N");
tabla.put("telefono", "91555443322");
tabla.put("email", "[email protected]");
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
TA B L A h a s h
TreeMap<K,V>
E S U N M A PA Q U E A L M AC E N A L A S C L AV E S O R D E N A DA S
S I G U I E N D O S U O R D E N N AT U R A L , AT E N D I E N D O A L A
I M P L E M E N TAC I Ó N D E L M É TO D O c o m p a r e T o ( ) ; .
Ejemplo
public static void main(String[] args) {
TreeMap <String,Integer> mapaNumeros = new
TreeMap<String,Integer>();
mapaNumeros.put("uno", 1);
mapaNumeros.put("dos", 2);
...
mapaNumeros.put("diez", 10);
for (String s: mapaNumeros.descendingKeySet()){
System.out.print(mapaNumeros.get(s));
}
System.out.print("\n------------\n");
for (String s: mapaNumeros.headMap("ocho", false).keySet()){
System.out.print(mapaNumeros.get(s));
}
}
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
La salida sería:
13768921045
------------
541029
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
SE REPRESENTAN CON
Map<K,V>
Recorrer mapas
No heredan de Colletion ni de Iterable
pero aun así se pueden recorrer.
El siguiente método
P E R M I T E R E CO R R E R TO DA S L A S C L AV E S D E U N M A PA Y S U S VA LO R E S A S O C I A D O S :
API de transmisión
Una de las principales características
nuevas de Java 8 es la introducción de
la funcionalidad de transmisión,
java.util.stream, que contiene clases
para procesar secuencias de
elementos.
La clase de API central es Stream<T>.
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Operaciones de streams
Hay muchas operaciones útiles que se pueden realizar en un stream. Se dividen en:
Iteración
H a z c l i c
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Iteración
Stream API permite sustituir los bucles for, for-each y while. Permite
concentrarse en la lógica de operación, pero no en la iteración sobre la
Filtración secuencia de elementos. Por ejemplo:
for (String string : list) {
H a z c l i c
if (string.contains("a")) {
return true;
}
}
Con Java 8 este código se podría escribire solo con una línea de código:
boolean isExist = list.stream().anyMatch(element -
>element.contains("a"));
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Iteración
Stream API ofrece un conjunto de instrumentos para validar
elementos de un stream de acuerdo con algún predicado. Para
Filtración
hacer esto, se puede usar uno de los siguientes métodos:
anyMatch(), allMatch(), noneMatch(). Esas operaciones
Cartografía. devuelven un valor booleano:
Mapping
boolean isValid = list.stream().anyMatch(element ->
Pareo. Matching element.contains("h")); // true
boolean isValidOne = list.stream().allMatch(element ->
element.contains("h")); // false
boolean isValidTwo = list.stream().noneMatch(element ->
element.contains("h")); // false
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Cartografía. El código anterior supone algo así como una apuesta segura, ya
Mapping que no podemos encontrar ningún elemento que no satisfaga el
predicado.
Pareo. Matching De igual manera, el método anyMatch() siempre devuelve falso
para secuencias vacías:
Reducción Stream.empty().anyMatch(Objects::nonNull); // false
H a z c l i c
De nuevo es algo lógico, ya que no podemos encontrar un
elemento que satisfaga esta condición.
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
Iteración
La reducción también puede proporcionarse mediante
el método collect() de tipo Stream. Esta operación es
Filtración muy útil si queremos convertir un flujo en una colección
o un mapa y representar un flujo en forma de una sola
Cartografía. cadena. Hay una clase de utilidad Collectors que
Mapping
proporciona una solución para casi todas las
operaciones de recolección típicas. Para algunas tareas
Pareo. Matching
no triviales, se puede crear un recopilador
personalizado.
Reducción
S t re a m d e
S t re a m va c í o colección S t re a m d e A r ray
+ + +
Haz clic
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
S t re a m va c í o
S t re a m d e
S t re a m va c í o colección S t re a m d e A r ray
+ + +
Haz clic
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
S t re a m d e
colección
Collection<String> collection =
Arrays.asList("a", "b", "c"); Stream<String>
streamOfCollection = collection.stream();
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
S t re a m d e
S t re a m va c í o colección S t re a m d e A r ray
+ + +
Haz clic
G e s t i ó n d e c o l e c c i o n e s . Tra b a j a n d o c o n s t re a m s J ava . F l u j o s y f i c h e ro s
S t re a m d e
A r ray