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。 |