我正在阅读 Ricahrd Warburton 的 Java 8 书籍,他提供了以下练习:
尝试使用方法引用重写以下内容:
[...]
平面地图 连接列表的方法
我真的不明白如何在这里应用flatMap
。让我感到困惑的是,平面映射用于将Stream
的每个元素映射到另一个Stream
,然后将它们连接在一起以产生更大的Stream
但在这里我们必须分离List<T>
。
public static <T> List<T> concat(List<T> lst1, List<T> lst2){
//lst1.stream().flatMap() - it maps each elements
//of lst1 to stream and concatenates it for each
//element
}
有什么想法吗?
出于练习的目的,想法是使用 Stream.of(...)
创建一个包含两个给定列表的Stream<List<T>>
,并使用方法引用List::stream
对每个列表进行平面映射。这会将Stream<List<T>>
展平为Stream<T>
。然后,您可以使用Collectors.toList()
将所有元素收集到一个列表中:
public static <T> List<T> concat(List<T> lst1, List<T> lst2){
return Stream.of(lst1, lst2).flatMap(List::stream).collect(Collectors.toList());
}