Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
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); }});