让我说我有一个带有这个构造函数的MyClass
public MyClass(double[] column){
//...
}
是否可以编写类似
的内容MyClass myClass=IntStream
.range(0, column.length)
.mapToDouble(i->modify(column[i]))
.instantiateFromArray(MyClass::new);
而不是
MyClass myClass=new MyClass(
IntStream.range(0, column.length).mapToDouble(i->modify(column[i])).toArray()
);
答案 0 :(得分:1)
如果你的构造函数保持原样:public MyClass(double[] column)
,我担心你做得比你做的更好。
另一方面,如果您可以将构造函数更改为:
public MyClass(List<Double> column)
然后你可以这样做:
MyClass myClass = IntStream.range(0, column.length)
.mapToObj(i -> modify(column[i]))
.collect(Collectors.collectingAndThen(
Collectors.toList(),
MyClass::new));
这使用Collectors.collectingAndThen
,它接受收集器,然后使用结果作为给定函数的输入。在这种情况下,我们首先将Double
值收集到List
,然后使用对MyClass
的构造函数的引用作为函数(构造函数可以看作是接收a的函数) List<Double>
作为参数并返回MyClass
)的实例。
免责声明:我不会仅仅为了代码风格而进行所有这些更改。数组更快,可以保存原始值,而List
只能保存对象。如果在MyClass
类中有一个列表而不是一个数组,我只会选择此选项。