java - 使用 Java 中的流和 lambda 使用 for 循环重写笛卡尔积
问题描述
我正在尝试让自己熟悉流和 lambda,并且有兴趣了解我们如何在 lambda 和流方面编写类似以下内容。虽然这是笛卡尔积并且可能有更简单的方法可以做到这一点,但我更喜欢使用与 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);
}
}
}
解决方案
您可以将两个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());
推荐阅读
- junit4 - 如何使用空手道将酱实验室的工作结果设置为通过或失败?
- javascript - 在 Chrome 中打开 window.open 后可见性 API 不起作用
- reactjs - React + Jest :- Babel Error Plugin/Preset files are not allowed to export objects, only functions
- android - RecyclerView Android中的重叠项目
- mockito - java.lang.ClassCastException: org.mockito.codegen.Throwable$MockitoMock$1720133689 不能转换为 com..exception.myException
- c# - 使用真实与克隆属性编辑 C# WPF PropertyGrid
- java - Java:为什么使用 nextInt() 时 while(true) 循环会自动中断?
- android - 如何更改 ListView 项目的高度?
- python - 自定义提交无效 JSON 数据时的错误响应
- java - (有点解决但仍然感谢更好的答案) Android Studio:如何识别 PDF 文件中的某些特殊页面?