相关疑难解决方法(0)

未按计数评估中间流操作

我似乎无法理解 Java 如何将流操作组合到流管道中。

执行以下代码时

public
 static void main(String[] args) {
    StringBuilder sb = new StringBuilder();

    var count = Stream.of(new String[]{"1", "2", "3", "4"})
            .map(sb::append)
            .count();

    System.out.println(count);
    System.out.println(sb.toString());
}
Run Code Online (Sandbox Code Playgroud)

控制台只打印4. 该StringBuilder对象仍然具有值""

当我添加过滤操作时: filter(s -> true)

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();

    var count = Stream.of(new String[]{"1", "2", "3", "4"})
            .filter(s -> true)
            .map(sb::append)
            .count();

    System.out.println(count);
    System.out.println(sb.toString());
}
Run Code Online (Sandbox Code Playgroud)

输出更改为:

4
1234
Run Code Online (Sandbox Code Playgroud)

这个看似多余的过滤操作如何改变组合流管道的行为?

java java-stream

36
推荐指数
2
解决办法
1093
查看次数

在java中,为什么流peek对我不起作用?

我们在流上有窥视功能,这是接受消费者的中间功能.那么在我的情况下为什么不用"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)

lambda java-8 java-stream

3
推荐指数
1
解决办法
1237
查看次数

标签 统计

java-stream ×2

java ×1

java-8 ×1

lambda ×1