Stream流
一、概述
	Stream流:可以按照特定的规则对数据进行操作。
	【注意】:Stream流本身不会储存数据。
二、Stream流的使用
	生成流→中间操作→终结操作
1.生成流:
	    通过数据源(数组、列表等)生成流,如:list.stream()。
	    常见的生成方式:
	(1)Collection体系的集合可以使用默认方法stream()生成流。
List<String> l=new ArrayList<String>(); Stream<String> listStream = l.stream();
Set<String> set=new HashSet<>(); Stream<String> setStream = set.stream();
	(2)Map体系的集合可以通过分别获得键、值、键值对的Set集合来间接的生成流。
Map<String,Integer> m=new HashMap<>(); Stream<String> keyStream = m.keySet().stream(); Stream<Integer> valueStream = m.values().stream(); Stream<Map.Entry<String, Integer>> entryStream = m.entrySet().stream();
	(3)数组可以通过Stream接口的静态方法of(T... values)生成流。
String[] strArr={"hello","world","java"};
Stream<String> strArrStream = Stream.of(strArr);
Stream<String> stream = Stream.of("hello", "world", "java");
2.中间操作
	        一个流可以跟多个中间操作,其目的是打开流,做出某种程度的数据过滤或映射,然后返回一个新的流,交给下一个操作使用,如:filter()。
| 
					Stream<T> filter(Predicate<? super T> predicate) | 
				返回此流中符合条件(由Predicate给出)的元素组成的流。 | 
| 
					Stream<T> limit(long maxSize) | 
				返回此流中前maxSize个元素组成的流。 | 
| 
					Stream<T> skip(long n) | 
				返回跳过前n个元素后剩下的元素组成的流。 | 
| 
					static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) | 
				返回由流a和流b元素合并的流。注意这是个静态方法,直接用Stream接口调用该方法。 | 
| 
					Stream<T> distinct() | 
				返回此流中不重复元素组成的流。 | 
| 
					Stream<T> sorted() | 
				
					返回此流根据自然顺序排序后的元素组成的流。 | 
			
| 
					Stream<T> sorted(Comparator<? super T> comparator) | 
				
					返回此流根据Comparator比较器排序后的元素组成的流。 | 
			
| 
					<R> Stream<R> map(Function<? super T,? extends R> mapper) | 
				
					返回由给定函数应用于此流的元素的结果组成的流。 | 
			
| 
					IntStream mapToInt(ToIntFunction<? super T> mapper) | 
				
					返回一个 IntStream其中包含将给定函数应用于此流的元素的结果。 | 
			
3.终结操作
	        一个流只能有一个终结操作,当终结操作被执行后,流就无法再被操作,forEach()。
| 
					void forEach(Consumer<? super T> action) | 
				
					对此流的每个元素执行指定的操作。 | 
			
| 
					long count() | 
				
					返回此流中的元素个数。 | 
			
三、Stream流的收集操作
1.收集方法
| 
					<R,A> R collect(Collector<? super T,A,R> collector) | 
				
					将此流的元素收集到一个新的集合。 | 
			
2.Collectors工具类的常用方法
| 
					static <T> Collector<T,?,List<T>> toList() | 
				
					返回一个 Collector ,将输入的元素收集到一个新的 List 。 | 
			
| 
					static <T> Collector<T,?,Set<T>> toSet() | 
				
					返回一个 Collector ,将输入的元素收集到一个新的 Set。 | 
			
| 
					static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> key, Function<? super T,? extends U> value) | 
				
					返回一个 Collector ,将元素通过函数收集到一个新的  Map。 | 
			

查看2道真题和解析