Translate

viernes, 5 de junio de 2026

¿Por qué Java Streams no pueden ser LINQ?


Imaginá esto:

repoPersona

    .filter(p -> p.getEdad() > 50)

    .toList();



Y que mágicamente se transforme en:

SELECT * FROM persona WHERE edad > 50;


Sería hermoso.

Pero… ¿no son lazy los streams?

Sí, los streams en Java son lazy:


users.stream()

     .filter(u -> u.getAge() > 50)

     .toList();


No se ejecuta hasta el final


Peeeero...

Lazy no es lo mismo que interpretable


En Java, esto:

u -> u.getAge() > 50


Se compila a bytecode

No queda como estructura accesible


Es decir:

  • No podés analizarla
  • No podés transformarla
  • No podés convertirla en SQL


 ¿Por qué en C# sí se puede?


En .NET LINQ pasa algo distinto:

repo.Where(x => x.Age > 50)


Eso no es una función normal

Es: Expression<Func<T, bool>>


El código es datos (un AST)


Por esta razón necesitamos de cosas como Specification de jpa para tipar nuestras querys :(


Java Streams no pueden ser LINQ porque:  Java no puede “leer” lambdas como datos


Y eso obliga a usar soluciones como Specifications.


No hay comentarios.:

Publicar un comentario