Java流“forEach”但不消耗流
有时,在处理流的步骤之间对流中的每个元素进行“某事”(例如打印)将是方便的,例如用于调试。
一个简单的例子可能看起来像这样,不幸的是,这不起作用,因为forEach
消耗流:
List list = new ArrayList(); list.add("one"); list.add("two"); list.add("three"); list.add("four"); List filteredList = list.stream() .filter(s -> s.startsWith("t")) .forEach(System.out::println) .collect(Collectors.toList());
怎么能实现这一目标?
您正在寻找peek
操作:
此方法主要用于支持调试,您希望在元素流经管道中的某个点时查看这些元素
此方法将在Stream管道消耗时对Stream管道的所有元素执行给定操作。 因此,它允许窥视元素。
List filteredList = list.stream() .filter(s -> s.startsWith("t")) .peek(System.out::println) .collect(Collectors.toList());