使用 flatMap 连接列表



我正在阅读 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());
}

最新更新