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);
}});