Brian Goetz’s recent post on the State of the Lambda reveils exciting new ideas that are prone to be included in Java 8. One of them is the concept of “Streams” as opposed to “Collections”. Using the new Java 8 extension methods, the Iterable interface can be extended compatibly with a lot of “lazy” and “eager” methods for streaming behaviour:
public interface Iterable<T> {
// Abstract methods
Iterator<T> iterator();
// Lazy operations
Iterable<T> filter(Predicate<? super T> predicate) default ...
<U> Iterable<U> map(Mapper<? super T, ? extends U> mapper) default ...
<U> Iterable<U> flatMap(
Mapper<? super T, ? extends Iterable<U>> mapper) default ...
Iterable<T> cumulate(BinaryOperator<T> op) default ...
Iterable<T> sorted(
Comparator<? super T> comparator) default ...
<U extends Comparable<? super U>> Iterable<T> sortedBy(
Mapper<? super T, U> extractor) default ...
Iterable<T> uniqueElements() default ...
<U> Iterable<U> pipeline(
Mapper<Iterable<T>, ? extends Iterable<U>> mapper) default ...
<U> BiStream<T, U> mapped(
Mapper<? super T, ? extends U> mapper) default ...
<U> BiStream<U, Iterable<T>> groupBy(
Mapper<? super T, ? extends U> mapper) default ...
<U> BiStream<U, Iterable<T>> groupByMulti(
Mapper<? super T, ? extends Iterable<U>> mapper) default ...
// Eager operations
boolean isEmpty() default ...;
long count() default ...
T getFirst() default ...
T getOnly() default ...
T getAny() default ...
void forEach(Block<? super T> block) default ...
T reduce(T base, BinaryOperator<T> reducer) default ...
<A extends Fillable<? super T>> A into(A target) default ...
boolean anyMatch(Predicate<? super T> filter) default ...
boolean noneMatch(Predicate<? super T> filter) default ...
boolean allMatch(Predicate<? super T> filter) default ...
<U extends Comparable<? super U>> T maxBy(
Mapper<? super T, U> extractor) default ...
<U extends Comparable<? super U>> T minBy(
Mapper<? super T, U> extractor) default ...
}
The above are rough and incomplete API ideas, or as Brian Goetz puts it: A “strawman writeup of the key concepts”.
The goal of this early publication is for the community to “TRY OUT THE CODE. *The single most valuable thing that the community can do to help move this effort forward, and improve the quality of the result, is to try out the code early and often.*”
Read the full article here:
http://cr.openjdk.java.net/~briangoetz/lambda/collections-overview.html



May 10th, 2013 at 09:44
[…] from the “big stuff”, related to extension methods, lambda, and the streams API, Java 8 also has a couple of minor, very subtle changes. One of them is the fact that you can now […]