Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 Lambda创建两个(或更多)列表的笛卡尔乘积集合_Java_Scala_Lambda_For Comprehension - Fatal编程技术网

使用Java Lambda创建两个(或更多)列表的笛卡尔乘积集合

使用Java Lambda创建两个(或更多)列表的笛卡尔乘积集合,java,scala,lambda,for-comprehension,Java,Scala,Lambda,For Comprehension,在Scala中,我可以通过以下方式轻松实现这一点: def permute(xs: List[Int], ys: List[Int]) = { for {x <- xs; y <- ys} yield (x,y) } def-permute(xs:List[Int],ys:List[Int])={ 因为{x我很难弄清楚你想要什么,看起来你想得到一个笛卡尔积?比如,给定{1,2}和{3,4},你期望{(1,3)、(1,4)、(2,3)、(2,4)}?(值得一提的是,我认为这与排列

在Scala中,我可以通过以下方式轻松实现这一点:

def permute(xs: List[Int], ys: List[Int]) = {
  for {x <- xs; y <- ys} yield (x,y)
}
def-permute(xs:List[Int],ys:List[Int])={

因为{x我很难弄清楚你想要什么,看起来你想得到一个笛卡尔积?比如,给定
{1,2}
{3,4}
,你期望
{(1,3)、(1,4)、(2,3)、(2,4)}
?(值得一提的是,我认为这与排列的数学定义没有任何关系,排列通常涉及对单个列表内容排序的不同方式。)

那是可以写的

xs.stream()
  .flatMap(x -> ys.stream().map(y -> Pair.of(x, y)))
  .collect(toList());

如果你想避免重复,那么你是在组合之后,而不是笛卡尔积之后

        List<Integer> xs = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
        List<Integer> ys = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));

        List<String> combinations =
                xs.stream()
                .flatMap(
                        x -> ys.stream()
                        .filter( y -> x != y)
                        .map(y -> x + ":" + y)
                ).collect(Collectors.toList());
        System.out.println(combinations);

我来自未来。这就是我知道这一点的原因。=)

你完全理解我想要的东西。这个词似乎是错的。当我想要得到列表组合的数量从两个增加到三个以上时,嵌套似乎是不可避免的。这肯定比我之前所做的更干净。顺便说一句,这对来自OpenJFX/JavaFX,它在包n中您可以用AbstractMap.SimpleImmutableEntry替换它。
[1:3, 1:4, 1:5, 1:6, 1:7, 2:3, 2:4, 2:5, 2:6, 2:7, 3:4, 3:5, 3:6, 3:7, 4:3, 4:5, 4:6, 4:7, 5:3, 5:4, 5:6, 5:7, 6:3, 6:4, 6:5, 6:7, 7:3, 7:4, 7:5, 7:6]