在Java中使用流和lambda重写笛卡尔乘积

在Java中使用流和lambda重写笛卡尔乘积,java,lambda,functional-programming,java-stream,Java,Lambda,Functional Programming,Java Stream,我正在尝试熟悉streams和lambdas,并且有兴趣了解我们如何在lambdas和streams方面编写以下内容。虽然这是笛卡尔积,可能有更简单的方法,但我更喜欢使用“嵌套”操作的答案,这些操作与流一起引入,如map、filter、collect等 List<String> names = Arrays.asList("Superman", "Batman", "Wonder Woman"); List<Strin

我正在尝试熟悉streams和lambdas,并且有兴趣了解我们如何在lambdas和streams方面编写以下内容。虽然这是笛卡尔积,可能有更简单的方法,但我更喜欢使用“嵌套”操作的答案,这些操作与流一起引入,如map、filter、collect等

List<String> names = Arrays.asList("Superman", "Batman", "Wonder Woman");
List<String> likes = Arrays.asList("good1", "good2", "good3");
List<String> dislikes = Arrays.asList("bad1", "bad2", "bad3");

List<String> statements = new ArrayList<>();
for (String r : names) {
  for (String s : likes) {
    for (String t : dislikes) {
      statements.add(r + " likes " + s + " and dislikes " + t);
    }
  }
}
List name=Arrays.asList(“超人”、“蝙蝠侠”、“神奇女侠”);
List likes=Arrays.asList(“good1”、“good2”、“good3”);
List dislikes=Arrays.asList(“bad1”、“bad2”、“bad3”);
列表语句=新的ArrayList();
for(字符串r:名称){
for(字符串s:喜欢){
for(字符串t:不喜欢){
添加(r+“喜欢”+s+“不喜欢”+t);
}
}
}

您可以将两个
flatMap
操作与嵌套的
map
操作一起使用

final List<String> statements = names.stream().flatMap(r->
    likes.stream()
        .flatMap(s -> dislikes.stream()
            .map(t -> r + " likes " + s + " and dislikes " + t))
).collect(Collectors.toList());
final List statements=names.stream().flatMap(r->
likes.stream()
.flatMap->dislikes.stream()
.map(t->r+“喜欢”+s+“不喜欢”+t))
).collect(Collectors.toList());

<代码> R+”喜欢“+S+”,不喜欢“+T 每一次都是非常昂贵的,如果你考虑效率的话,你可以在某种程度上预想某个部分如<代码> R+”。