Stream流:
java.util.stream.Stream<T> 是java 8 新加入的常用的流接口(这不是函数式接口)
Stream流属于管道流,只能被消费一次,第一个Stream调用完毕之后,数据就会流转到下一个Stream上,而这时第一个Stream已经使用完毕,就会关闭了,所以第一个Stream就不能在调用方法了
获取流:
- 所有的Collection集合都可以通过stream默认方法获取流
default Stream<E> stream()
- Stream接口的静态方法 of 可以获取数组对应的流
static <T> Stream<T> of (T...values)
参数是一个可变参数,那么我们就可以传递一个数组
代码
List<String> list = new ArrayList<String>();
Stream<String> stream1 = list.stream();
Set<String> set = new HashSet<String>();
Stream<String> stream2 = set.stream();
Map<String, String> map = new HashMap<String, String>();
//获取键,存储到一个set集合中
Set<String> keySet = map.keySet();
Stream<String> stream3 = keySet.stream();
//获取值,存储到一个Collection集合
Collection<String> value = map.values();
Stream<String> stream4 = value.stream();
Set<Entry<String, String>> entrySet = map.entrySet();
Stream<Entry<String, String>> stream5 = entrySet.stream();
Stream<Integer> stream6 = Stream.of(1,2,3,4,5);
Integer[] arr = {1,2,3};
Stream<Integer> stream7 = Stream.of(arr);
方法分类:
延迟方法:返回值类型仍然为Stream接口自身类型的方法,支持链式编程(除终结方法外,都是延迟方法)
终结方法:返回值类型不是Stream接口自身类型的方法,不支持链式编程 包括:count 和 forEach方法
常用方法:
1.-forEach: 用于遍历流
void forEach(Consumer<? super T> action):
该方法接收一个Consumer接口函数,会将每一个流元素交给该函数进行处理
Consumer接口是一个消费型的函数型接口,可传递Lambda表达式, 抽象方法 void accept(T t)
简单记:
forEach方法,用来遍历流中的数据
是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法
2.-filter: 用于对Stream流中的数据进行过滤
Stream<T> filter(Predicate <? super T> predicate)
参数是一个函数型接口,可传递Lambda表达式, 抽象方法 boolean test(T t)
3.-map: 将流中的元素映射到另一个流中
<R> Stream<R> map(Function<? super T,? extends R> mapper):
参数是一个函数式接口,可以将当前流中的T类型数据转换为另一种R类型的流
Function中的抽象方法:
R apply(T t);
4.-count: 用于统计Stream流中的元素个数
Long Count();
Count方法是一个终结方法,返回值是一个Long类型的整数
所以不能再继续调用Stream流中的其他方法了
5.-limit: 用于截取流中的数据,只取用前n个
Stream<T> limit(long maxSize)
参数是一个long型,如果集合当前长度大于参数截取,否则不进行操作
limit方法是一个延迟方法,对流元素截取,返回一个新流,所以可以继续调用Stream流中的其他方法
6.-skip: 用于跳过元素,跳过前几个,获取一个截取之后的新流
Stream<T> skip(long n):
如果流的当前长度大于n,则跳过前n个;否则返回一个长度为0的空流
7.-concat: 用于把流组合到一起
static <T> Stream<T> concat(Stream <? extends T> a, Stream <? extends T> b)
8.-sorted(Comparetor com): 默认升序排列
.sorted((x,y) -> -1) : 反转stream
9.- distinct(): 去重