在Groovy中将2个列表与流相结合

在Groovy中将2个列表与流相结合,groovy,functional-programming,Groovy,Functional Programming,假设我有两个大小相等的列表[1,2,3,4,…]和[a,b,c,d,…]。有没有一种方法可以在不使用lambda函数或嵌套函数的情况下用流来映射1到a、2到b、3到c等等 我会在一个函数中使用map和pass,但是这个传入函数只能接受一个参数,我需要这两条信息来将元素映射到彼此 IntStream(1, list1.size()).stream().map(this.&combineListsFunction).collect... combineListsFunction只能使用流中

假设我有两个大小相等的列表[1,2,3,4,…]和[a,b,c,d,…]。有没有一种方法可以在不使用lambda函数或嵌套函数的情况下用流来映射1到a、2到b、3到c等等

我会在一个函数中使用map和pass,但是这个传入函数只能接受一个参数,我需要这两条信息来将元素映射到彼此

IntStream(1, list1.size()).stream().map(this.&combineListsFunction).collect...

combineListsFunction
只能使用流中的信息,但我需要两个列表才能使函数工作。

您可以转换两个列表(这将为您提供一个元组列表,然后使用
collectEntries()
从中创建映射。例如:


有没有更通用的方法来解决使用
map
的问题,但传入的函数需要多条信息?我简化了我的实际问题,但没想到简化后的问题会有自己的具体答案。答案是否定的
map
需要一个
函数
,因此您必须提供一个fu只需一个参数,就可以使用一个列表,然后自己进行分解。或者从外部捕获一些东西(例如提供一个映射的闭包)。或者查找缺少的
zip
函数在Guava、StreamEx中有一个zip方法,可能还有其他库,用于在Java中连接两个流
def l1 = [1,2,3]
def l2 = ["a","b","c"]

assert [(1): "a", (2): "b", (3): "c"] == [l1,l2].transpose().collectEntries()