我试图在没有Java 8的Android应用程序中应用RXJava,这意味着我不能使用lambda函数。为了确保我理解基础知识,我只想看一个使用map()和reduce()的简单示例。
我试图实现的示例是求和作为String类型List提供的整数。我想把整件事包装在一个函数中,这个函数可以被调用来获得总和,而函数调用者不需要理解这个函数是通过函数编程实现的。
我已经实现了以下内容,但它似乎过于复杂。例如,我必须使finalSum是一个数组,因为错误:无法为最终变量赋值。
我觉得这太复杂了,因为我可能误解了函数式编程/反应式编程/函数式反应式编程/等等的一些基本概念。
public void mapReduceTest() {
List<String> ints = new ArrayList<>();
ints.add("10");
ints.add("20");
ints.add("30");
System.out.println("finalSum[0] (should equal 60) = " + sumStringOfInts(ints));
}
public Integer sumStringOfInts(List<String> ints) {
final Integer[] finalSum = new Integer[1];
Observable.from(ints)
.map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return new Integer(s);
}
})
.reduce(new Func2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer x, Integer sum) {
return sum + x;
}
})
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer sum) {
finalSum[0] = sum;
}
});
return finalSum[0];
}
有人有更简单的解决方案吗?
这似乎太复杂了
lambda可以帮助您编写更简洁的代码。
我不能使用lambda函数。作为一个测试,以确保我了解基本知识
在这种情况下,你会得到很多样板文件。此外,许多IDE允许您编写一个lambdas,即使是在Java 7项目中,并提供将其转换为匿名内部类的快速修复方法。
我必须做最后的决定
toBlocking()。firstOrDefault(null)
将为您获取reduce操作的结果,如果需要,将对其进行阻塞:
public Integer sumStringOfInts(List<String> ints) {
return Observable.from(ints)
.map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return Integer.parseInt(s);
}
})
.reduce(new Func2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer x, Integer sum) {
return sum + x;
}
})
.toBlocking()
.firstOrDefault(null);
}
有人有更简单的解决方案吗?
您可以将reduce
部分替换为MathObservable。来自RxJavaMath库的sumInt()
,但这并不漂亮:
public Integer sumStringOfInts(List<String> ints) {
return
MathObservable.sumInteger(
Observable.from(ints)
.map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return Integer.parseInt(s);
}
})
)
.toBlocking()
.firstOrDefault(null);
}
问题内容: 谁能指出我一个简单的Java开源Map / Reduce框架/ API?似乎没有太多证据表明存在这种事物,但是其他人可能知道不同。 我所能找到的最好的当然是HadoopMapReduce,但这不符合“简单”标准。我不需要运行分布式作业的能力,仅需要让我使用标准Java5风格的并发性在单个JVM中的多核计算机上运行映射/简化样式的作业。 写自己不是一件难事,但我宁愿不必这样做。 问题
问题内容: 我试图了解Java中的策略模式和枚举。我已经对此进行了谷歌搜索,并找到了一些有关该主题的文章,但是对于我的理解,其中大多数似乎太复杂了。谁能提供一个简单的示例或另一个链接,使用java中的外行术语枚举来演示策略模式? 预先谢谢你。 问题答案: 应该这样做: 这是对策略使用的Wikipedia文章的重新实现。 或更长一点但更清楚的是一种策略模式:
本文向大家介绍简单了解python filter、map、reduce的区别,包括了简单了解python filter、map、reduce的区别的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了简单了解python filter、map、reduce的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python中有一些非常有趣的函
我正在处理一个freecodecamp挑战,我想知道为什么我的代码不工作,以及如何纠正它。 目标是“返回一个数组,该数组由每个提供的子数组中的最大数组成。” 我的尝试是使用减少作为映射函数映射输入数组: 当前输出为: 我应该如何修复我的代码?
本文向大家介绍Python map和reduce函数用法示例,包括了Python map和reduce函数用法示例的使用技巧和注意事项,需要的朋友参考一下 先看map。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 举例说明,比如我们有一个函数a(x)=x*2,要把这个函数作用在一个list [1, 2, 3, 4,
我必须在下面的地图中输入一个整数值。 当我运行上面的代码我得到下面的错误,有人能帮我吗