给定以下代码:
List<String> list = Arrays.asList("a", "b", "c");
list.stream()
.map(s -> s + "-" + s) //"a-a", "b-b", "c-c"
.filter(s -> !s.equals("b-b")) //"a-a", "c-c"
.forEach(s -> System.out.println(s));
map
和 filter
是中间操作,forEach
是终端操作。只有在执行终端操作之后,我们才能得到数据转换的结果。
是否有办法强制计算变得更加迫切,并且拥有某种类型的中间结果 - 而不破坏流操作链?例如,我想要 "a-a"、"b-b"、"c-c" 的列表(这将是第一个中间操作的结果)。
map
和filter
之间peek
流吗?map(...).peek(targetList::add).filter(...)
。当然,如果流被并行处理,你需要使用线程安全的列表。 - Alexis C.