Stream流的使用
生成流
通过数据源(集合,数组等)生成流
list.stream()
中间操作
一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流,交给下一个操作使用
filter()
终结操作
一个流只能有一个终结操作,当这个操作执行后,流就被使用 “光” 了,无法再被操作
forEach()
Stream流常见生成方式
Collection体系的集合可以使用默认方法 stream()
生成流
default Stream<E> stream()
Map体系的集合简介的生成流
Stream<K> keyStream = map.keySet().stream(); // Map键生成流
Stream<V> valueStream = map.values().stream(); // Map值生成流
Stream<Map.Entry<String,Integer>> entryStream = map.entrySet().stream();
// Map键值对对象生成流
数组可以通过Stream接口的静态方法 of(T... values)
生成流
String[] strArray = new String[1024];
Stream<String> strArrayStream = Stream.of(strArray); // 数组生成流方式一
Stream<Integer> intStream = Stream.of(10,20,30); // 数组生成流方式二
Stream<T> filter(Predicate predicate)
:用于对流中的数据进行过滤
Predicate
接口中的方法 Boolean test(T t)
:对给定的参数进行判断,返回一个布尔值Stream<T> limit(long maxSize)
:返回此流中的元素,截取前指定参数个数的数据
Stream<T> skip(long n)
:跳过指定参数个数的数据,返回由该流的剩余元素组成的流
static <T> Stream<T> concat(Stream a,Stream b)
:合并a和b两个流为一个流
Stream<T> distinct()
:返回由该流的不同元素(根据 Object equals(Object o)
)组成的流
Stream<T> sorted()
:返回由此流的元素组成的流,根据自然顺序排序
Stream<T> sorted(Comparator comparator)
:返回由该流的元素组成的流,根据提供的Comparator进行排序
<R> Stream<R> map(Function mapper)
:返回由给定函数应用于此流的元素的结果组成的流,常用于转化
Function
接口中的方法 R apply(T t)
IntStream mapToInt(ToIntFunction mapper)
:返回一个IntStream其中包含给定函数应用于此流的元素的结果
IntStream
:表示原始int流ToIntFunction
接口中的方法:int applyAsInt(T value)
IntStream
中特有的方法的int sum()
:对流中的值进行求和,并返回求和结果void forEach(Consumer action)
:对此流的每个元素执行操作
Consumer
接口中的方法 void accept(T t)
:对给定的参数执行此操作long count()
:返回此流中的元素个数R collect(Collector collector)
:该收集方法的参数是一个Collector接口public static <T> Collector toList()
:把元素收集到List集合中public static <T> Collector toSet()
:把元素收集到Set集合中public static Collector toMap(Function keyMapper,Function valueMapper)
:把元素收集到Map集合中