一、Stream流的生成方式
1、collection集合可以用默认方法stream生成流。
如 ArrayList<String> list = new ArrayList<String>();list.stream().forEach();
2、Map集合间接生成
3、数组通过Stream接口的静态方法of(T... values)生成流。
二、Stream流的中间操作方法
1、Stream<T> filter(Predicate<? super T> predicate) 返回由与此给定谓词匹配的此流的元素组成的流。
2、Stream<T> limit(long maxSize) 返回由此流的元素组成的流,截短长度不能超过 maxSize 。
3、Stream<T> skip(long n) 在丢弃流的第一个 n元素后,返回由该流的剩余元素组成的流。
4、static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) 创建一个懒惰连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。
5、Stream<T> distinct() 返回由该流的不同元素(根据 Object.equals(Object) )组成的流。
6、Stream<T> sorted() 返回由此流的元素组成的流,根据自然顺序排序。
7、Stream<T> sorted(Comparator<? super T> comparator) 返回由该流的元素组成的流,根据提供的 Comparator进行排序。
8、IntStream mapToInt(ToIntFunction<? super T> mapper) 返回一个 IntStream其中包含将给定函数应用于此流的元素的结果。
三、Stream流终结操作
1、void forEach(Consumer<? super T> action) 对此流的每个元素执行操作。
2、long count() 返回此流中的元素数。
四、举例说明
public static void main ( String [ ] args) { ArrayList < String > arr = new ArrayList < String > ( ) ; arr. add ( "张三" ) ; arr. add ( "林三" ) ; arr. add ( "张无忌" ) ; arr. add ( "张三丰" ) ; arr. add ( "杨玉环" ) ; arr. stream ( ) . filter ( s -> s. startsWith ( "张" ) ) . forEach ( System . out:: println ) ; System . out. println ( "--------------" ) ; arr. stream ( ) . filter ( s -> s. length ( ) == 3 ) . forEach ( System . out:: println ) ; System . out. println ( "--------------" ) ; arr. stream ( ) . filter ( s -> s. startsWith ( "张" ) ) . filter ( s -> s. length ( ) == 3 ) . forEach ( System . out:: println ) ; System . out. println ( "--------------" ) ; arr. stream ( ) . limit ( 3 ) . forEach ( System . out:: println ) ; System . out. println ( "--------------" ) ; arr. stream ( ) . skip ( 2 ) . forEach ( System . out:: println ) ; System . out. println ( "--------------" ) ; arr. stream ( ) . skip ( 2 ) . limit ( 2 ) . forEach ( System . out:: println ) ; Stream < String > stream = arr. stream ( ) . limit ( 4 ) ; Stream < String > stream1 = arr. stream ( ) . skip ( 2 ) ;
System . out. println ( "-----------" ) ; Stream . concat ( stream, stream1) . distinct ( ) . forEach ( System . out:: println ) ; ArrayList < String > arrs = new ArrayList < String > ( ) ; arrs. add ( "linqingxia" ) ; arrs. add ( "zhangsnafeng" ) ; arrs. add ( "anhaode" ) ; arrs. add ( "bolaiwen" ) ; arrs. add ( "kangyouwei" ) ; arrs. stream ( ) . sorted ( ) . forEach ( System . out:: println ) ; System . out. println ( "----------" ) ; arrs. stream ( ) . sorted ( ( s1, s2) -> { int num = s1. length ( ) - s2. length ( ) ; int num1 = num == 0 ? s1. compareTo ( s2) : num; return num1; } ) . forEach ( System . out:: println ) ; System . out. println ( "----------" ) ; long count = arr. stream ( ) . filter ( s -> s. startsWith ( "张" ) ) . count ( ) ; System . out. println ( count) ; }
运行结果:
张三
张无忌
张三丰
--------------
张无忌
张三丰
杨玉环
--------------
张无忌
张三丰
--------------
张三
林三
张无忌
--------------
张无忌
张三丰
杨玉环
--------------
张无忌
张三丰
-----------
张三
林三
张无忌
张三丰
杨玉环
anhaode
bolaiwen
kangyouwei
linqingxia
zhangsnafeng
----------
anhaode
bolaiwen
kangyouwei
linqingxia
zhangsnafeng
----------
3