O que o operador de seta ‘->’ faz em Java?

Enquanto procurava algum código, encontrei o operador de setas, o que exatamente ele faz? Eu pensei que Java não tivesse um operador de flecha.

return (Collection) CollectionUtils.select(listOfCars, (arg0) -> { return Car.SEDAN == ((Car)arg0).getStyle(); }); 

Detalhes : Java 6, Coleção Apache Commons, IntelliJ 12

Update / Answer: Acontece que o IntelliJ 12 suporta o Java 8, que suporta lambdas, e está “dobrando” Predicados e exibindo-os como lambdas. Abaixo está o código “não dobrado”.

 return (Collection) CollectionUtils.select(listOfCars, new Predicate() { public boolean evaluate(Object arg0) { return Car.SEDAN == ((Car)arg0).getStyle(); } }); 

Isso é parte da syntax das novas expressões lambda, a ser introduzida no Java 8. Existem alguns tutoriais on-line para pegar o jeito, aqui está um link para um. Basicamente, o -> separa os parâmetros (lado esquerdo) da expressão real (lado direito).

Eu acredito que esta seta existe por causa do seu IDE. O IntelliJ IDEA faz isso com algum código. Isso é chamado de dobramento de código. Você pode clicar na seta para expandi-la.

Este também é útil quando você deseja implementar uma interface

 Runnable r = ()-> System.out.print("Run method"); 

é equivalente a

 Runnable r = new Runnable() { @Override public void run() { System.out.print("Run method"); } }; 

É uma expressão lambda.

Isso significa que, a partir do listOfCars, arg0 é um dos itens dessa lista. Com esse item ele vai fazer, daí o ->, o que está dentro dos parênteses.

Neste exemplo, ele retornará uma lista de carros que se encheckboxm na condição

 Car.SEDAN == ((Car)arg0).getStyle();