Avatar ·

¿Cuál es el análogo de LINQ en Java? ¿Cómo trabajar eficientemente con colecciones?

¡Hola, colegas! Soy un desarrollador Java principiante, viniendo de C#. Allí usaba activamente LINQ (Language Integrated Query) para filtrar, ordenar y proyectar datos en colecciones. Por ejemplo, este código en C# me era familiar:

var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
var evenSquares = numbers
    .Where(n => n % 2 == 0)
    .Select(n => n * n)
    .ToList();
// Resultado: [4, 16, 36]

Ahora en Java trabajo con colecciones y entiendo que los bucles for-each comunes para estas tareas implican mucho código boilerplate. Por ejemplo, así es como filtro una lista actualmente:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenSquares = new ArrayList<>();
for (Integer n : numbers) {
    if (n % 2 == 0) {
        evenSquares.add(n * n);
    }
}

Esto funciona, pero el código resulta voluminoso, especialmente cuando se necesitan realizar varias operaciones en cadena (filtrado, ordenamiento, etc.).