Stream流
Stream流的三类方法
- 获取Stream流:创建Stream
- 中间方法:Stream的一次操作
- 终结方法:一个Stream流只能有一个终结方法
Stream流的获取方法
- 单列集合
可以使用Collection接口中的默认方法stream()生成流
default Stream<E> stream()
- 双列集合
间接生成流
可以先通过keySet或者entrySet获取一个Set集合,再获取Stream流
集合对象.keySet().stream();
集合对象.entrySet().stream();
- 数组
Arrays中的静态方法stream生成流
Arrays.stream()数组名;
- 同种数据类型的多个数据
使用Stream.of(T...values)
生成流
Stream流的常见中间方法
Stream< T > filter(Predicate predicate)
:用于对流中的数据进行过滤
Predicate接口中的方法boolean test(T t):对给定的参数进行判断,接口中只有一个抽象方法test,所以可以用lambda表达式简化
Stream<T> limit(long maxSize)
:截取指定参数个数的数据
Stream<T> skip(long n)
:跳过指定参数个数的数据
static<T> Stream<T> concat(Stream a,Stream b)
:合并a和b两个流为一个流
Stream<T> distinct()
:去除流中重复的元素.依赖(hashCodes和equals方法)
在Stream流中无法直接修改集合、数组等数据源中的数据
Stream流的常见终结方法
void forEach(Consumer action)
:对此流的每个元素执行操作
Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
在forEach方法底层,会循环获取到流中的没一个数据,并循环调用accept方法,并把没一个数据传递给accept方法
long count()
:返回流中的数据个数
Stream流的收集操作
Stream流的收集方法
R collect(Collector collector)
工具类Collectors提供了具体的收集方式
public static <T> Collector toList():
把元素收集到List集合中
public static <T> Collector toSet()
:把元素收集到Set集合中
public static <T> Collector toMap(Function keyMapper, Function valueMapper)
:把元素收集到Map集合中