gpt4 book ai didi

android - 无法理解 Lambda -> 运算符

转载 作者:行者123 更新时间:2023-11-29 14:34:44 25 4
gpt4 key购买 nike

我从网上复制了一段使用 Lambda 运算符的代码。以下是代码。

  Observable.interval(5, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
.zipWith(listObj, (time, item) -> item)

我正在尝试学习 rxJava,但无法了解此 lambda 函数的工作原理,即那些时间和项目变量的工作原理?

如果我在内部文档中打开zipwith()方法,那么它是这样的

 @SchedulerSupport(SchedulerSupport.NONE)
public final <U, R> Observable<R> zipWith(Iterable<U> other, BiFunction<? super T, ? super U, ? extends R> zipper) {
ObjectHelper.requireNonNull(other, "other is null");
ObjectHelper.requireNonNull(zipper, "zipper is null");
return RxJavaPlugins.onAssembly(new ObservableZipIterable<T, U, R>(this, other, zipper));
}

现在我的列表 obj 是字符串的数组列表。那么有人能告诉我这些参数如何与使用 Lambda 运算符的方法精确映射吗?谁能告诉我如何在不使用 lambda 运算符的情况下编写相同的方法?谢谢。

最佳答案

Lambda 运算符指定一个 anonymous function .它是一个没有名字的函数,只包含参数和“主体”。如果我们以您的 lambda 函数 (time, item) -> item 为例。它接受两个参数,timeitem 并返回 itemzipWith() 接受的函数指定为

zipFunction - a function that combines the pairs of items from the Observable and the Iterable to generate the items to be emitted by the resulting Observable

在您的情况下,它将接受来自时间间隔的当前 time 和来自 listObjitem。然后 lambda 函数决定如何将这两者组合成 Observableemitt 的内容。

一个使用 lambda 的简单示例如下所示:

String[] presets = {"A", "B", "C", "D", "CA"};

// Find all matching
List<String> resultList = Arrays.stream(presets)
.filter(x -> x.startsWith("C"))
.collect(Collectors.toList());

我们基本上根据 lambda 函数 x -> x.startsWith("C")。这意味着它将遍历数组,获取元素 (x) 并根据条件返回 truefalse。在这种情况下,它将过滤那些以 C 开头的 Strings

您的示例没有 lambda,使用 RxJava1 中的匿名类。对于 RxJava2,您需要使用 BiFunction 而不是 Func2

  Observable.interval(5, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
.zipWith(listObj, new Func2<Integer, String, String>() {
public String call(Integer value1, String value2) {
return value2 + String.valueOf(value2);
}
});

这将花费您的时间并将其与listObj 中的当前item 连接起来。

关于android - 无法理解 Lambda -> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51720513/

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