4.3 流与集合

Collection API和Stream API的不同。

  • 集合是在内存的数据结构,计算出元素才能添加到集合;
  • 流是在概念上固定的数据结构,按需计算获取元素;

4.3.1 只能遍历一次

类似于迭代器,流只能消费一次,重复消费会抛出java.lang.IllegalStateException: stream has already been operated upon or closed。

List<String> title = Lists.newArrayList("Java8", "In", "Action");
Stream<String> stream = title.stream();
stream.forEach(System.out::println);
stream.forEach(System.out::println); 

4.3.2 外部迭代与内部迭代

外部迭代指基于集合的循环遍历,显式取出每个元素处理,灵活性更强;

List<String> names = Lists.newArrayList();
for (Dish d : menu) {
   names.add(d.getName());
}
return names;

内部迭代指流的声明式遍历,内置延迟、短路、并行等优化功能,可读性更强;

return menu.stream()
        .map(Dish::getName)
        .collect(Collectors.toList());
内部迭代与外部迭代
posted @ 2023-07-05 01:04  蒋智  阅读(20)  评论(0)    收藏  举报