1. Colecciones en Java
Las colecciones son estructuras de datos
dinámicas que permiten almacenar y manipular grupos de objetos.
Principales interfaces:
- List: mantiene orden y permite duplicados (ArrayList, LinkedList).
- Set: no permite duplicados (HashSet, TreeSet, LinkedHashSet).
- Map: almacena pares clave-valor (HashMap, TreeMap, LinkedHashMap).
- Queue: estructuras de cola (PriorityQueue, ArrayDeque).
Ejemplo:
List<String> lista = new ArrayList<>();
lista.add("Java");
lista.add("Python");
lista.add("Go");
Set<String> conjunto = new HashSet<>(lista);
Map<Integer, String> mapa = new HashMap<>();
mapa.put(1, "Uno");
mapa.put(2, "Dos");
2. Genéricos
Los genéricos permiten escribir clases,
interfaces y métodos que trabajen con tipos parametrizados.
Sirven para evitar casting y mejorar la seguridad en tiempo de compilación.
Ejemplo de clase genérica:
class Caja<T> {
private T contenido;
public void guardar(T valor) {
contenido = valor; }
public T obtener() { return contenido; }
}
3. Expresiones Lambda
Las lambdas permiten definir funciones anónimas de forma concisa, ideales para usar con colecciones y streams.
Ejemplo:
List<String> lenguajes =
Arrays.asList("Java", "Python", "Go", "Kotlin");
lenguajes.forEach(l -> System.out.println("Lenguaje: " + l));
lenguajes.stream().filter(l ->
l.startsWith("J")).forEach(System.out::println);
4. Streams
Los streams permiten procesar colecciones
de datos de forma funcional y declarativa.
Características:
- No almacenan datos, solo procesan flujos.
- Pueden ser intermedias (map, filter, sorted) o terminales (collect, forEach,
reduce).
Ejemplo:
List<Integer> numeros =
Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> cuadradosPares = numeros.stream()
.filter(n -> n % 2 == 0)
.map(n -> n * n)
.collect(Collectors.toList());
int suma = numeros.stream().reduce(0, Integer::sum);
https://github.com/moleculax/javaMan/blob/main/README.md
https://dev.java/learn/lambdas/