【发布时间】:2021-03-30 09:27:11
【问题描述】:
我是一名 Java 初学者,我刚刚了解了 map 和 flatMap。
当 2d List 应该转换为 1d List 时,它的实现如下。
List<List<Integer>> list_2d = List.of(List.of(1, 2), List.of(3, 4));
List<Integer> lst1 = list_2d
.stream()
.flatMap(arr -> arr.stream())
.collect(Collectors.toList());
printAll(lst1); // [1, 2, 3, 4]
但是,我认为它看起来可以不使用flatMap来实现。
有没有办法让代码具有相同的逻辑,只使用map,而不使用flatMap?
只是问因为map是否可以替换所有flatMap,没有理由记住flatMap。我总是追求简单和基本的东西。
【问题讨论】:
-
我不认为你可以在不使用 flatMap 的情况下将单个 Stream 元素转换为多个 Stream 元素。
map仅将单个元素转换为不同类型的单个元素。 -
@OleV.V.正因为,如果map可以代替所有的flatMap,那么就没有理由去记住flatMap了。我总是追求简单而基本的东西。
-
@frhyme -
I always pursue simple and basic thing.-flatMap确实是一个简单而基本的东西。 Java 变得如此流行的原因之一是因为这些简单的构造/类型/操作;否则,在 C/C++ 中,我们不得不处理许多复杂性,因为没有可用的简单和基本的东西,例如。想想 Java 和 C/C++ 中的字符和字符串。
标签: java list java-stream flatmap