- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
与此问题相关 https://stackoverflow.com/questions我想用 rxJava2 在 Java 中实现与在 haskell How can I implement generalized "zipn" and "unzipn" in Haskell? 中相同的效果:
在 haskell 中,我可以使用应用仿函数来实现这一点:
f <$> a1 <*> a2 <*> a3 <*> a4 <*> a5 <*> a6 <*> a7 <*> a8 <*> a9 <*> a10 <*> a11
正在
f :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> String -> String -> String -> Int
和
a1 .. a11
每种类型对应的值
Java
:
import io.reactivex.annotations.NonNull;
public interface Function11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R> {
@NonNull
R apply(@NonNull T1 var1, @NonNull T2 var2, @NonNull T3 var3, @NonNull T4 var4, @NonNull T5 var5, @NonNull T6 var6, @NonNull T7 var7, @NonNull T8 var8, @NonNull T9 var9, @NonNull T10 var10, @NonNull T11 var11) throws Exception;
}
以及使用该接口(interface)的函数:
Function11<String, Integer, Optional<Integer>, String, String, String, String, String, String, String, String, String> f = (s, i1, i2, s2, s3, s4, s5, s6, s7, s8, s9) -> "".join("-", s, "i" + i1.toString(), "i" + i2.orElse(5).toString(), s2, s3, s4, s5, s6, s7, s8, s9);
您需要的论点来自以下来源:
Single<String> singleString1 = Single.just("s1");
Single<Integer> singleOne = Single.just(1);
Optional<Single<Integer>> singleOptionalTwo = Optional.of(Single.just(2));
Single<String> singleString2 = Single.just("s2");
Single<String> singleString3 = Single.just("s3");
Single<String> singleString4 = Single.just("s4");
Single<String> singleString5 = Single.just("s5");
Single<String> singleString6 = Single.just("s6");
Single<String> singleString7 = Single.just("s7");
Single<String> singleString8 = Single.just("s8");
Single<String> singleString9 = Single.just("s9");
然后是 zipArray 函数:
Single.zipArray(
(Object[] array) ->
function11(
(String) array[0],
(Integer) array[0],
(Optional<Integer>) array[0],
(String) array[0],
(String) array[0],
(String) array[0],
(String) array[0],
(String) array[0],
(String) array[0],
(String) array[0],
(String) array[0],
(String) array[0]
)
,
singleString1,
singleOne,
singleString2,
singleString2,
singleString3,
singleString4,
singleString5,
singleString6,
singleString7,
singleString8,
singleString9
);
如您所见,有几个错误:
Optiona<Single<String>>
?
最佳答案
为了解决这个问题,我使用了另一个答案中的工具:
public interface Function11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R> {
@NonNull
R apply(@NonNull T1 var1, @NonNull T2 var2, @NonNull T3 var3, @NonNull T4 var4, @NonNull T5 var5, @NonNull T6 var6, @NonNull T7 var7, @NonNull T8 var8, @NonNull T9 var9, @NonNull T10 var10, @NonNull T11 var11) throws Exception;
}
然后,我创建扩展类:
public class SingleExtension {
public static <A, B> Single<B> zipOver(Single<Function<A, B>> applicativeFunctor, Single<A> applicativeValue) {
return Single.zip(
applicativeFunctor,
applicativeValue,
(Function<A, B> f, A a) -> f.apply(a));
}
public static <A, B> Single<B> zipOverOptional(Single<Function<Optional<A>, B>> applicativeFunctor, Optional<Single<A>> applicativeValue) {
if (applicativeValue.isPresent()) {
return Single.zip(
applicativeFunctor,
applicativeValue.get(),
(Function<Optional<A>, B> f, A a) -> f.apply(Optional.of(a))
);
} else {
return applicativeFunctor.map((f) -> f.apply(Optional.empty()));
}
}
}
最后,我使用它。
public static void main(String[] args) {
Function11<String, Integer, Optional<Integer>, String, String, String, String, String, String, String, String, String> function11 = (String s1, Integer i2, Optional<Integer> i3, String s4, String s5, String s6, String s7, String s8, String s9, String s10, String s11) -> "".join("-", s1, "i" + i2.toString(), "i" + i3.orElse(5).toString(), s4, s5, s6, s7, s8, s9, s10, s11);
Function<String, Function<Integer, Function<Optional<Integer>, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>>>>>>> curryF = Curry.curry(function11);
Single<Function<String, Function<Integer, Function<Optional<Integer>, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>>>>>>>> applicativeCurryF = Single.just(curryF);
Single<String> singleString1 = Single.just("s1");
Single<Integer> singleOne = Single.just(1);
Optional<Single<Integer>> singleOptionalTwo = Optional.of(Single.just(2));
Single<String> singleString2 = Single.just("s2");
Single<String> singleString3 = Single.just("s3");
Single<String> singleString4 = Single.just("s4");
Single<String> singleString5 = Single.just("s5");
Single<String> singleString6 = Single.just("s6");
Single<String> singleString7 = Single.just("s7");
Single<String> singleString8 = Single.just("s8");
Single<String> singleString9 = Single.just("s9");
Single<String> singleString10 = Single.just("s10");
Single<Function<Integer, Function<Optional<Integer>, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>>>>>>> applied1 = (SingleExtension.zipOver(applicativeCurryF, singleString1));
Single<Function<Optional<Integer>, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>>>>>> applied2 = (SingleExtension.zipOver(applied1, singleOne));
Single<Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>>>>> applied3 = (SingleExtension.zipOverOptional(applied2, singleOptionalTwo));
Single<Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>>>> applied4 = (SingleExtension.zipOver(applied3, singleString2));
Single<Function<String, Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>>> applied5 = (SingleExtension.zipOver(applied4, singleString3));
Single<Function<String, Function<String, Function<String, Function<String, Function<String, String>>>>>> applied6 = (SingleExtension.zipOver(applied5, singleString4));
Single<Function<String, Function<String, Function<String, Function<String, String>>>>> applied7 = (SingleExtension.zipOver(applied6, singleString5));
Single<Function<String, Function<String, Function<String, String>>>> applied8 = (SingleExtension.zipOver(applied7, singleString6));
Single<Function<String, Function<String, String>>> applied9 = (SingleExtension.zipOver(applied8, singleString7));
Single<Function<String, String>> applied10 = (SingleExtension.zipOver(applied9, singleString8));
Single<String> result = (SingleExtension.zipOver(applied10, singleString9));
result
.test()
.assertValue("s1-i1-i2-s2-s3-s4-s5-s6-s7-s8-s9");
System.out.println("All ok");
}
如果库将包含这些方法,那么将它们链接起来会很容易,如下所示:
String result = applicativeCurryF
.zipOver(singleString1)
.zipOverOptional(singleOptionalTwo)
.zipOver(singleString2)
.zipOver(singleString3)
.zipOver(singleString4)
.zipOver(singleString5)
.zipOver(singleString6)
.zipOver(singleString7)
.zipOver(singleString8)
.zipOver(singleString9)
关于java - 如何将 rxjava2 Zip 函数(从 Single/Observable)的数量概括为 n 个可选参数而不丢失其类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62888208/
在下面的方法中,如何将第一个Single的结果传递给第二个Single? 如现在所写,当它返回时,somethingId 是空的。如果我将返回的 Single.just(somethingId) 中的
我发现很多帖子都在回答类似的问题(例如“如何用 / 替换 \”或“如何替换 \\” by \”。我理解所有这些,但没有一个能解决我的特殊问题。这里是: 我正在从注册表中读取路径字符串,其中包含“///
注意:事实证明,toCompletable() 并非错误,而是调用代码。调用代码使得更改此方法使其工作(或不工作)。 我有以下方法。它返回一个 Single。有用。执行内部代码,以便 remoteDa
react-native repo here 中的一个文件中有一段代码如下图: export type Operation = & {instanceID: DebugID} & (
当使用带有 Single() 的 LINQ 时,我的代码行总是带有绿色下划线,并带有建议“替换为对 single 的单一调用”。这是什么意思?下面是产生该建议的一行代码示例: var user = d
讨论来自 this answer让我好奇。哪个更快: someEnumerable.Single(predicate); 或 someEnumerable.Where(predicate).Singl
我正在使用 Keycloak 作为单点登录 (SSO) 平台的 OP。我已经将我的两个 Web 应用程序连接到 Keycloak,以便使用单点登录功能。 此外,我已经制作了一个应用程序,当注销时将被重
我的步骤是: 创建单个值 x - 可能会占用一些 CPU 资源 使用值x来执行IO操作。这已经返回 Completable 返回x 所以我想这样做: Single result =
我想知道是否有人可以阐明这个问题,什么时候使用 Single.fromCallable( ()-> myObject ) 代替 Single.just(myObject) 根据文档,Single.fr
我有两个 Singles 来源,我将它们组合成一个 Single of Pair。 假设我们对这些来源有两种方法: private Single single1() {} private Single
我想将单个 Intel CPU 内核的速度与单个 nVidia GPU 内核的速度(即:单个 CUDA 代码、单个线程)进行比较。我确实实现了以下简单的二维图像卷积算法: void convoluti
我在实现 Ping Federate 时遇到此问题 Error - Single Sign-On Single sign-on authentication was unsuccessful (ref
我有几个 api 调用(Rx singles),我想将它们组合成一个 Single。我正在使用 Single.merge 尝试合并这些调用的结果,但是当我订阅响应时,我得到一个空数组,因为订阅已经发生
早上好。我的代码有问题 bootsfaces 。我需要我的 DataTable 支持单行选择,但不支持多行选择。但是,我的表格始终只使用多项选择。 这是我的代码: 我没有进行简单的选择,因为我引用了
我怎样才能像下面的代码那样使用字符串。 $str = 'Is yo"ur name O'reil"ly?'; 上面的代码只是一个例子..我需要使用包含单引号和双引号的大 html 模板。我尝试了 Ad
我有一组地理空间+时间数据和一些附加属性,我将在 map 上显示这些数据。该集合目前有几百万份文件,并且会随着时间的推移而增加。 每个文档都有以下字段: 位置:[geojson 对象] 日期:[日期对
我目前在 .NET 2.0 下使用 SharpZipLib,通过它我需要将单个文件压缩为单个压缩存档。为此,我目前正在使用以下内容: string tempFilePath = @"C:\Users\
我有 table create table1( column1 number(10, column2 number(10), column3 number(10) ); column1是主
考虑下面这段代码,我正在尝试使用 Executors.newFixedThreadPool(1).asCoroutineDispatcher()创建单线程调度程序;我想要 launch(singleT
我面临着困惑,举个例子 4 Single: val s1 : Single = service1.execute().subscribeOn(io()) val s2 : Single = servi
我是一名优秀的程序员,十分优秀!