记录一:Java8 stream peek使用
Stream<T> peek(Consumer<? super T> action), 是针对流中的每个元素执行操作action,通常用于查阅中间流结果。它能够将中间变量的值输出到日志,帮助了解流水线的每一步操作的输出值。
注意点:(1)使用peek操作流,流中的元素没有改变。
(2)peek对一个对象进行操作的时候,对象不变,但是可以改变对象里面的值。
当看到第(1)点时,会觉得peek只是用于debug查看流水线输出情况的,但是可以利用第(2)点对数据做一些处理。
例如:
public class Test {
public static void main(String[] args) {
List<Person> collect = Arrays.asList(new Person("001", "ms"), new Person("002", "ls"))
.stream().filter(p -> "ls".equals(p.getName())).peek(p -> p.setId("000")).collect(Collectors.toList());
collect.forEach(c-> System.out.println(c));
}
}
@AllArgsConstructor
@Data
public class Person {
private String id;
private Strin