Stream流思想
创建一条流水线,在流水线上有各种各样的操作,最后将剩余的数据全部输出。
具有获取Stream流方法,中间方法,终结方法。
Stream流的获取
单列集合:集合对象.stream()
双列集合:不能直接获取,需要间接获取
集合对象.keySet().stream()
集合对象.entrySet.stream()
数组:Arrays.stream(数组名)
同种数据类型的多个数据:stream.of(数据1,数据2,数据3....)
Stream流的常见中间操作方法
Stream<T> filter(Predicate predicate)
:用于对流中的数据进行过滤
Predicate接口中的方法boolean test(T t)
:对给定的参数进行判断,返回一个布尔值
过程:
- filter方法获取流中的每一个数据
- 而test方法中的s,就依次表示流中的每一个数据
- 我们只要在test方法中对s进行判断就可以了
- 如果判断的结果为true,则当前的数据留下
- 如果判断的结果为false,则当前数据就不要
Stream<T> limit(long maxSize)
:截取前指定参数个数的数据Stream<T> skip(long n)
:跳过前指定参数个数的数据static<T> Stream<T> concat(Stream a,Stream b)
:合并a和b两个流为一个流,a在前,b在后。Stream<T> distinct()
:去除流中重复的元素。依赖(hashCode和equals方法)Stream流的常见终结操作方法
void forEach(Consumer action)
:对此流的每个元素执行操作
Consumer接口中的方法void accept(T t)
:对给定的参数执行此操作-
Stream流的收集操作
在Stream流中无法直接修改集合,数组等数据源中的数据。
Stream流的收集方法 R collect(Collector collector)
工具类Collectors提供了具体的收集方式
public static <T> Collector toList()
:把元素收集到List集合中public static <T> Collector toSet()
:把元素收集到Set集合中public static Collector toMap(Function keyMapper, Function valueMapper)
:把元素收集到Map集合中
Function keyMapper
:一个Lambda表达式,描述如何获取到Map中的键Function valueMapper
:另一个Lambda表达式,描述如何获取到Map中的值