@@ -30,6 +30,7 @@ mod filter;
30
30
mod filter_map;
31
31
mod find;
32
32
mod find_map;
33
+ mod flatten;
33
34
mod fold;
34
35
mod for_each;
35
36
mod fuse;
@@ -77,6 +78,7 @@ use try_for_each::TryForEeachFuture;
77
78
78
79
pub use chain:: Chain ;
79
80
pub use filter:: Filter ;
81
+ pub use flatten:: FlatMap ;
80
82
pub use fuse:: Fuse ;
81
83
pub use inspect:: Inspect ;
82
84
pub use map:: Map ;
@@ -93,6 +95,7 @@ use std::marker::PhantomData;
93
95
94
96
use cfg_if:: cfg_if;
95
97
98
+ use crate :: stream:: IntoStream ;
96
99
use crate :: utils:: extension_trait;
97
100
98
101
cfg_if ! {
@@ -106,7 +109,6 @@ cfg_if! {
106
109
cfg_if ! {
107
110
if #[ cfg( any( feature = "unstable" , feature = "docs" ) ) ] {
108
111
mod merge;
109
- mod flatten;
110
112
111
113
use std:: pin:: Pin ;
112
114
@@ -496,7 +498,6 @@ extension_trait! {
496
498
#
497
499
# }) }
498
500
```
499
-
500
501
"# ]
501
502
fn last(
502
503
self ,
@@ -570,6 +571,42 @@ extension_trait! {
570
571
Filter :: new( self , predicate)
571
572
}
572
573
574
+ #[ doc= r#"
575
+ Creates an stream that works like map, but flattens nested structure.
576
+
577
+ # Examples
578
+
579
+ Basic usage:
580
+
581
+ ```
582
+ # async_std::task::block_on(async {
583
+
584
+ use std::collections::VecDeque;
585
+ use async_std::prelude::*;
586
+ use async_std::stream::IntoStream;
587
+
588
+ let inner1: VecDeque<u8> = vec![1,2,3].into_iter().collect();
589
+ let inner2: VecDeque<u8> = vec![4,5,6].into_iter().collect();
590
+
591
+ let s: VecDeque<_> = vec![inner1, inner2].into_iter().collect();
592
+
593
+ let flat= s.flat_map(|s| s.into_stream() );
594
+ let v: Vec<u8> = flat.collect().await;
595
+
596
+ assert_eq!(v, vec![1,2,3,4,5,6]);
597
+
598
+ # });
599
+ ```
600
+ "# ]
601
+ fn flat_map<U , F >( self , f: F ) -> FlatMap <Self , U , F >
602
+ where
603
+ Self : Sized ,
604
+ U : IntoStream ,
605
+ F : FnMut ( Self :: Item ) -> U ,
606
+ {
607
+ FlatMap :: new( self , f)
608
+ }
609
+
573
610
#[ doc = r#"
574
611
Both filters and maps a stream.
575
612
0 commit comments