Code listings for "Using Java 8 Lambda Expressions, Part 2," Java Magazine, March/April 2013
[Listing 1]
public default void sort(Comparator<? super E> c) {
Collections.<E>sort(this, c);
}
[Listing 2]
List<String> myStrings = getSomeStrings();
String search = getSearchString();
System.out.println(myStrings.stream().filter(s -> s.equals(search)).into(new ArrayList<>()));
[Listing 3]
stream() filter() map() into()
Collection -> Stream -> Stream -> Stream -> Collection
[Listing 4]
public interface Stream<T> extends BaseStream<T> {
Stream<T> filter(Predicate<? super T> predicate);
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
}
[Listing 5]
Set<Otter> ots = getOtters();
System.out.println(ots.stream()
.filter(o -> !o.isWild())
.map(o -> o.getKeeper())
.filter(k -> k.isFemale())
.into(new ArrayList<>())
.size());
[Listing 6]
Set<Otter> ots = getOtters();
Keeper kate = new Keeper(Gender.F);
Keeper bob = new Keeper(Gender.M);
Otter splash = new Otter(Gender.F);
splash.incAge();
splash.setKeeper(kate);
ots.add(splash);
double aveAge = ((double) ots.stream().map(o -> o.getAge()).reduce(0, (x, y) -> {return x + y;} )) / ots.size();
System.out.println("Average age: "+ aveAge);
[Listing 7]
ots.stream()
.filter(o -> !o.isWild())
.filter(o -> o.getKeeper().equals(kate))
.forEach(o -> o.setKeeper(bob));
Copyright 2013 Oracle Corporation
来自java magazine 2013 四月
简单说下
增加了一个Stream
可以把 集合变为Stream处理(有点类似Iterator)
filter是过滤当前流得到符合条件的对象的流
map是以表达式中返回的对象作为新的流(以上o -> o.getKeeper() 得到的就是Keeper的流)
forEach 按字面意思理解 就是每个流内的对象执行表达式内的操作