我使用NameValuePair
(返回lookupFunction
)映射Function
s流,如下所示:
List<NameValuePair> paramPairs = getParamPairs();
List<NameValuePair> newParamPairs = paramPairs.stream()
.map((NameValuePair nvp) -> lookupFunction(nvp.getName()).apply(nvp))
.flatMap(Collection::stream)
.collect(toList());
但是,如果lookupFunction
返回了Collection<Function>
,我想对每个返回的.map()
执行Function
该怎么办?我该怎么做?
答案 0 :(得分:3)
如果lookupFunction(nvp.getName())
返回一个函数集合,您可以获取该集合的Stream并将每个函数映射到将其应用于NameValuePair的结果:
List<NameValuePair> newParamPairs = paramPairs.stream()
.flatMap((NameValuePair nvp) -> lookupFunction(nvp.getName()).stream().map(func -> func.apply(nvp)))
.flatMap(Collection::stream)
.collect(toList());
答案 1 :(得分:1)
我使用一个将函数集合组合成一个函数的函数。并在我的代码中使用它而不是lookupFunction
Function<String, Function<NameValuePair, NameValuePair>> composedFun =
x -> lookupFunctions(x)
.stream()
.reduce((fun1, fun2) -> fun1.andThen(fun2))
.orElse(y -> y);
...
.map(nvp -> composedFun.apply(nvp.getName()).apply(nvp))
...