小编Dav*_*idO的帖子

正常实例化和实例化之间的区别,包括方法引用

为什么在第一种情况 SomeClass 只实例化一次,但在第二种情况下 n 次,其中 n 是流中的元素数?

List<SomeClass> list = stream.map(new SomeClass()::method)
                            .collect(Collectors.toList());

Run Code Online (Sandbox Code Playgroud)
List<SomeClass> list = stream.map(a -> {return new SomeClass().method(a);})
                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

在这种情况下,方法“method”返回对象本身(= return this)。

所以在第一种情况下,列表只包含一个对象,但包含 n 次。在第二种情况下,列表包含 n 个不同的对象。

重现问题:主要:

Arrays.asList(true, false, true, false).stream().map(new SomeClass()::method)
                                                .collect(Collectors.toList());

System.out.println("----------------------");
        
Arrays.asList(true, false, true, false).stream().map(a -> {return new SomeClass().method(a);})
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

和 SomeClass.java:

public class SomeClass {
    
    public SomeClass() {
        System.out.println(this);
    }
    
    public SomeClass method(Boolean b) {
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream method-reference

4
推荐指数
1
解决办法
158
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1

method-reference ×1