我试图用Java8的流计算前面两个值的乘法。我想调用一个将返回数组/列表/集合的函数。我正在创建一个列表,并向其添加1,2。
假设列表名是result。
public static void main (String[] args) {
List<Integer> result = new ArrayList<Integer>();
result.add(1);
result.add(2);
int n = 5; //n can be anything, choosing 5 for this example
res(n, result);
//print result which should be [1, 2, 2, 4, 8]
}
public static List<Integer> res(int n, List<Integer> result ) {
result.stream()
.limit(n)
.reduce(identity, (base,index) -> base);
//return result;
}
<U> U reduce(U identity,
BiFunction<U,? super T,U> accumulator,
BinaryOperator<U> combiner)
简言之;我想传递一个有两个值的列表,让函数找到前两个值(1,2)的乘法,并将其添加到列表中,然后找到后两个值(2,2)的乘法,并将其添加到列表中,直到流达到极限。
看起来您正在尝试实现一个递归关系。reduce
方法将某个函数应用于流中的一堆预先存在的值。您不能使用reduce
并从reducer函数中获取一个中间结果并将其“反馈”到流中,这是实现递归关系所需要做的。
使用streams实现递归关系的方法是使用streams工厂方法之一stream.generate
或stream.iterate
。iterate
工厂似乎提出了最明显的方法。在您的示例中,需要为每个递归函数应用程序保持的状态需要两个int,因此不幸的是,我们必须创建一个对象来保存这些:
static class IntPair {
final int a, b;
IntPair(int a_, int b_) {
a = a_; b = b_;
}
}
使用此state对象,您可以创建一个实现所需递归的流:
Stream.iterate(new IntPair(1, 2), p -> new IntPair(p.b, p.a * p.b))
List<Integer> output =
Stream.iterate(new IntPair(1, 2), p -> new IntPair(p.b, p.a * p.b))
.limit(5)
.map(pair -> pair.a)
.collect(Collectors.toList());
System.out.println(output);
[1, 2, 2, 4, 8]
Stream.iterate(new IntPair(0, 1), p -> new IntPair(p.b, p.a + p.b))
您还可以使用stream.generate
实现类似的递归关系。这还需要一个助手类。helper类实现结果值的supplier
,但它也需要维护状态。因此,它需要是可变的,这在我的书中有点恶心。迭代函数也需要烘焙到生成器对象中。这使得它不如intpair
对象灵活,后者可用于创建任意递归。
陈述 我想去 但是显然没有使用...因为它不是切肉刀,我想了解更多关于函数及其传递参数的方式。 所以我尝试附加一个使用map函数列表的所有元素。但在此之前,是一个方法,而不是一个方法。 最后一个映射函数返回TypeError: 我想知道是否可以将参数传递给使用的方法。感谢
这可能是一个直接的问题,但我尝试了很多选择,但都不起作用。我给出了以下细节供大家参考。Mybatis xml配置:- Postgres功能:- 映射器配置:- 错误面对:- aused:org.apache.ibatis.type.TypeException:使用JdbcType数组为参数#1设置非空时出错。尝试为此参数设置不同的JdbcType或不同的配置属性。原因:java.lang.Clas
问题内容: 有什么方法可以通过引用SASS中的另一个函数或mixin来传递函数或mixin,然后调用引用的函数或mixin? 例如: 问题答案: 在Sass中,函数和混合函数不是 一流 的,这意味着您不能像传递变量那样将它们作为参数传递。 最接近的指令是(Sass 3.2+)。 唯一需要注意的是,您无法看到mixin内部的内容。换句话说,如果仅在mixin 内部定义,则它实际上将不存在,因为不在范
我尝试使用以下代码来完成此操作: 我得到以下输出: sim(测试,“测试”)
在上一个小节中我们学习了混合函数相关的语法特性,或者说是具有返回值的函数。 在 Less 中,我们可以把一个规则集当作一个 mixins 来使用,但是要注意区别两者之间的不同之处。 1. 什么是规则集? Allow wrapping of a css block, defined in a mixin 。——官方定义 慕课解释:把一个值为规则集的变量作为 Mixins 使用。 2. 语法详情 变量
Spark 的 API 很大程度上依靠在驱动程序里传递函数到集群上运行。这里有两种推荐的方式: 匿名函数 (Anonymous function syntax),可以在比较短的代码中使用。 全局单例对象里的静态方法。例如,你可以定义 object MyFunctions 然后传递 MyFounctions.func1,像下面这样: object MyFunctions { def func1(