gpt4 book ai didi

java - Stream消费后使用构造函数

转载 作者:行者123 更新时间:2023-11-30 10:28:19 24 4
gpt4 key购买 nike

假设我有一个带有此构造函数的 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()
);

最佳答案

如果您的构造函数保持原样: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 构造函数的引用作为函数(构造函数可以看作是接收 List<Double> 作为参数并返回 MyClass 的实例的函数)。

免责声明:我不会仅仅为了代码风格而进行所有这些更改。数组更快并且可以保存原始值,而 List只能容纳物体。如果在 MyClass 中有一个列表而不是一个数组,我只会选择这个选项。类。

关于java - Stream消费后使用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44727039/

24 4 0