gpt4 book ai didi

java - 如何在不破坏函数式编程原则的情况下将值读入 ArrayList?

转载 作者:行者123 更新时间:2023-11-29 04:20:22 25 4
gpt4 key购买 nike

我说的是 Java 上的函数式编程。假设我有一个 ArrayList 并想输入一些值。问题是我想不出一种不破坏范式原则的方法。到目前为止,我可以猜测我应该用递归函数替换迭代,但是将输入值传递给数组呢?如果我这样做:

Scanner in = new Scanner(System.in); 

然后:

MyArrayList.add(in.NextDouble( ) ); 

我实际上是在使用一个变量,所以我猜这个解决方案是 Not Acceptable 。如果我尝试使用 JOptionPane 获取输入,则相同,因为我必须将字符串转换为数字,这需要使用变量。有没有一种方法可以在不涉及变量或循环的情况下将值从键盘输入到 ArrayList?如果不是,那么面对这种情况时 FP 的标准做法是什么?就这一次视而不见,违背原则?

最佳答案

假设您要从 Scanner 获取 10 个 double 值。

然后您可以使用 streams :

List<Double> myArrayList = IntStream.range(0, 10)
.mapToObj(i -> in.nextDouble())
.collect(Collectors.toList());

作为commented by shmosel ,这可能是更好的方法:

List<Double> myArrayList = DoubleStream
.generate(in::nextDouble)
.limit(10)
.boxed()
.collect(Collectors.toList());

或者如果你想要一个原始数组,只需:

double[] myArrayList = DoubleStream.generate(in::nextDouble).limit(10).toArray();

更新

现在,如果您真的想用 Java 进行函数式编程,您不应该使用 Java 运行时库中的可变集合。相反,寻找一个函数式编程库,例如 Vavr :

Vavr core is a functional library for Java. It helps to reduce the amount of code and to increase the robustness. A first step towards functional programming is to start thinking in immutable values. Vavr provides immutable collections and the necessary functions and control structures to operate on these values. The results are beautiful and just work.

免责声明:我不了解 Vavr。在我目前的工作中不需要使用 Java 进行纯函数式编程。

关于java - 如何在不破坏函数式编程原则的情况下将值读入 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com