当前位置: 首页 > 知识库问答 >
问题:

需要简单的map()reduce()示例,在没有Java 8 lambdas的Android上使用RXJava

范宏大
2023-03-14

我试图在没有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];
}

有人有更简单的解决方案吗?

共有1个答案

璩和璧
2023-03-14

这似乎太复杂了

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,

  • 我必须在下面的地图中输入一个整数值。 当我运行上面的代码我得到下面的错误,有人能帮我吗