一、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