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