Quantas vezes você teve que procurar itens dentro de uma coleção e adicionar em uma lista temporário e gastou pelo menos umas 5 ou 6 linhas de código Java para isto? Código difíceis de ler e manter.
List<Contato> contatosQueMoramEmSaoPaulo = new ArrayList<Contato>();
for(Contato contato : todosContatos) {
if(contato.getEndereco().getCidade().equals("São Paulo")) {
contatosQueMoramEmSaoPaulo.add(contato);
}
}
Lambdaj é uma biblioteca que tornar fácil a resolução deste tipo de manipulação de collections através de código pseudo-funcional e estaticamente tipado. O propósito da biblioteca é resolver estes problemas aplicando algumas características de linguagens funcionais sem perder o tipagem estática do Java. Baseado em um Domain Specific Language(DSL) que facilita muito a criação de código legível.
O código anterior poderia ser resolvido com lambdaj da seguinte maneira:
List<Contato> contatosQueMoramEmSaoPaulo = select(todosContatos, having(on(Contato.class).getEndereco().getCidade(), equalTo("São Paulo"));
LambdaJ permite iteração em collections com o propósito de:
- filtrar os itens de uma coleção
- converter cada item de acordo com uma regra específica
- extrair uma propriedade específica de cada item
- classificar os items de acordo com o valor de uma dada propriedade
- agrupar ou indexar os itens de acordo com o valor de uma ou mais propriedades
- invocar um método de cada item
- somar os itens ou valores de uma dada propriedade
- concatenar strings dos itens ou dos valores de uma das propriedades
Você pode obter mais informações sobre o lambdaj no site: http://code.google.com/p/lambdaj. E conferir também análises de sua performance aqui.