This is a sneak peek of an exciting new data management technology. linq4j (short for "Language-Integrated Query for Java") is inspired by Microsoft's LINQ technology, previously only available on the .NET platform, and adapted for Java. (It also builds upon ideas I had in my earlier Saffron project.)

I launched the linq4j project less than a week ago, but already you can do select, filter, join and groupBy operations on in-memory and SQL data.

In this demo, I write and execute sample code against the working system, and explain the differences between the key interfaces Iterable, Enumerable, and Queryable.

For those of you who want to get a closer look at the real code, here's one of the queries shown in the demo:
DatabaseProvider provider =
new DatabaseProvider(Helper.MYSQL_DATA_SOURCE);
new Predicate1() {
public boolean apply(Employee v1) {
return v1.manager;
new Function1() {
public Integer apply(Employee a0) {
return a0.deptno;
new Function1() {
public Integer apply(Department a0) {
return a0.deptno;
new Function2() {
public String apply(Employee v1,
Department v2) {
return + " works in " +;
new Function1() {
public Void apply(String a0) {
return null;
and here is its (not yet implemented) sugared syntax:
List strings =
from emp in provider.emps,
join dept in provider.depts on emp.deptno == dept.deptno
where emp.manager
select + " works in " +;
For more information, visit the linq4j project's home page.