map
<R> Stream<R> map(Function<? super T, ? extends R> mapper)
map 方法接收一个功能型接口,功能型接口接收一个参数,返回一个值。map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素。该方法是 Intermediate 操作
Stream<String> stream = Stream.of("a", "b", "c", "d");
stream.map(String::toUpperCase).forEach(System.out::println);
以上代码通过 map 方法,把 a, b, c, d 全部转变成大写,然后输出
forEach
void forEach(Consumer<? super T> action)
forEach 接收一个 Consumer 接口,该接口我们之前讲 Function 包时已经提过了。它只接收不参数,没有返回值。然后在 Stream 的每一个元素上执行该表达式
范例:
Stream<String> stream = Stream.of("I", "love", "you");
stream.forEach(System.out::println);
区别
生成一个新的对象的时候,使用 map 会更好;只是操作 list 内部的对象时,用 forEach
这段代码,是无效的(appList 不会变化):
appMemberList.stream().map(appMember -> appList.add(appMember.getApp()));
要改成 forEach 才行
appMemberList.stream().forEach(appMember -> appList.add(appMember.getApp()));