Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参见Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参见JDK发布说明。
forEach
聚合操作与增强型for
语句或迭代器不同的方式。double average = roster .stream() .filter(p -> p.getGender() == Person.Sex.MALE) .mapToInt(Person::getAge) .average() .getAsDouble();
p -> p.getGender() == Person.Sex.MALE
是什么的示例? Person::getAge
是什么的示例?Stream.reduce
方法和Stream.collect
方法之间的一个重要区别。List
中,使用Stream.reduce
还是Stream.collect
操作最合适?for
语句转换为使用lambda表达式的流水线。提示:使用filter
中间操作和forEach
终端操作。for (Person p : roster) { if (p.getGender() == Person.Sex.MALE) { System.out.println(p.getName()); } }
for
循环的新实现。提示:创建一个调用filter
、sorted
和collect
操作的流水线,按照这个顺序进行调用。
List<Album> favs = new ArrayList<>(); for (Album a : albums) { boolean hasFavorite = false; for (Track t : a.tracks) { if (t.rating >= 4) { hasFavorite = true; break; } } if (hasFavorite) favs.add(a); } Collections.sort(favs, new Comparator<Album>() { public int compare(Album a1, Album a2) { return a1.name.compareTo(a2.name); }});