为什么在第一种情况 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)