Kau*_*che 3 lambda java-8 java-stream
我们在流上有窥视功能,这是接受消费者的中间功能.那么在我的情况下为什么不用"x"代替"r".peek应该理想地用于调试目的,但我只是想知道为什么它不起作用.
List<String> genre = new ArrayList<String>(Arrays.asList("rock", "pop", "jazz", "reggae"));
System.out.println(genre.stream().peek(s-> s.replace("r","x")).peek(s->System.out.println(s)).filter(s -> s.indexOf("x") == 0).count());
Run Code Online (Sandbox Code Playgroud)
因为peek()接受了Consumer.
A Consumer旨在接受参数但不返回任何结果.
例如这里:
genre.stream().peek(s-> s.replace("r","x"))
Run Code Online (Sandbox Code Playgroud)
s.replace("r","x")确实已执行,但它不会更改流的内容.
它只是一个方法范围的String实例,在调用之后超出了范围peek().
要进行测试,请替换peek()为map():
List<String> genre = new ArrayList<String>(Arrays.asList("rock", "pop", "jazz", "reggae"));
System.out.println(genre.stream().map(s -> s.replace("r", "x"))
.peek(s -> System.out.println(s))
.filter(s -> s.indexOf("x") == 0).count());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1237 次 |
| 最近记录: |