Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将函数列表应用于Java流';s.map()方法_Java_Lambda_Functional Programming_Java 8_Java Stream - Fatal编程技术网

将函数列表应用于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).