将函数列表应用于Java流';s.map()方法
我用一个将函数列表应用于Java流';s.map()方法,java,lambda,functional-programming,java-8,java-stream,Java,Lambda,Functional Programming,Java 8,Java Stream,我用一个查找函数(返回一个函数)映射一个名称值对流,如下所示: List<NameValuePair> paramPairs = getParamPairs(); List<NameValuePair> newParamPairs = paramPairs.stream() .map((NameValuePair nvp) -> lookupFunction(nvp.getName()).apply(nvp))
查找函数
(返回一个函数
)映射一个名称值对
流,如下所示:
List<NameValuePair> paramPairs = getParamPairs();
List<NameValuePair> newParamPairs = paramPairs.stream()
.map((NameValuePair nvp) -> lookupFunction(nvp.getName()).apply(nvp))
.flatMap(Collection::stream)
.collect(toList());
List paramPairs=getParamPairs();
List newParamPairs=paramPairs.stream()
.map((NameValuePair nvp)->lookupFunction(nvp.getName()).apply(nvp))
.flatMap(集合::流)
.collect(toList());
但是如果lookupFunction
返回了一个Collection
,而我想对每个返回的函数执行.map()
,该怎么办呢。我该怎么做?如果lookupFunction(nvp.getName())
返回函数集合,则可以获取该集合的流,并将每个函数映射到将其应用于NameValuePair的结果:
List<NameValuePair> newParamPairs = paramPairs.stream()
.flatMap((NameValuePair nvp) -> lookupFunction(nvp.getName()).stream().map(func -> func.apply(nvp)))
.flatMap(Collection::stream)
.collect(toList());
List newParamPairs=paramPairs.stream()
.flatMap((NameValuePair nvp)->lookupFunction(nvp.getName()).stream().map(func->func.apply(nvp)))
.flatMap(集合::流)
.collect(toList());
我会使用一个函数,将函数集合组合成一个函数。在我的代码中使用这个函数而不是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))
...
函数composedFun=
x->查找函数(x)
.stream()
.reduce((fun1,fun2)->fun1.然后(fun2))
.orElse(y->y);
...
.map(nvp->composedFun.apply(nvp.getName()).apply(nvp))
...
谢谢!看来我还需要那一秒。flatMap(Collection::stream)@neu242为什么?每个函数::apply是否返回一个集合而不是单个值?这个问题并不清楚,这就是为什么我删除了.flatMap(Collection::stream)
。这将为您提供将不同函数应用于列表中所有成员的所有排列。假设lookupFunction
为您提供了2个函数,并且paramPairs
有3项,那么这将产生一个包含6对的列表。不确定OP是否要求这样做。注意:可以编写当前代码:stream.map(NameValuePair::getName).map(this::lookupFunction).