数组转map
两个list合并
flatMap和mapToObj使用
collection() 用于收集方法
sorted() 排序
list.foreach(Sstem.out::print) 用来遍历流中的数据
,循环打印
filter() 用于对Stream流中的数据进行过滤
,满足条件的元素被筛选出来
distinct()去重,通过元素的hashcode()和equals()去重
map() 创建新数组,该数组中的元素是每调用一次后提供的函数返回值用于类型转换
findfirst()
skip()用于跳过n个元素
,配合limit实现分页
flatmap()
Comparator接口 比较排序作用
Stream流
作用
集合的过滤
集合元素的改造
集合元素的去重
多集合元素的:差集,交集(可以用redis的set,zset实现)
集合元素的聚合操作(min,max,count,累加)
Stream流的常用创建方法
1.1使用Collection下的stream()和parallesStream()方法
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();//获取一个顺序流
Stream<String> parallelStream = list.parallelStream();//获取一个并行流
1.2使用Arrays中的stream()方法,将数组转成流
Integer[] nums = new Integer[10];
Stream<Integer> stream = Arrays.stream(nums);
Stream<String> arraStream = Arrays.asList("1", "2").stream();
1.3使用Stream中的静态方法:of()、itreate()、generate()
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
Stream<Integer> limit = Stream.iterate(0, (x) -> x + 2).limit(6);
limit.forEach(System.out::println);
Stream<Double> limit1 = Stream.generate(Math::random).limit(2);
limit1.forEach(System.out::println);
============================
forEach方法,用来遍历流中的数据
是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法
Stream流中的常用方法_filter:用于对Stream流中的数据进行过滤
Stream filter(Predicate<? super T> predicate);
filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤
Predicate中的抽象方法:
boolean test(T t);
Stream流中的常用方法_map:用于类型转换
如果需要将流中的元素映射到另一个流中,可以使用map方法.
Stream map(Function<? super T, ? extends R> mapper);
该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的流。
Function中的抽象方法:
R apply(T t);
Stream流中的常用方法_count:用于统计Stream流中元素的个数
long count();
count方法是一个终结方法,返回值是一个long类型的整数
所以不能再继续调用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集合中
Stream流中的常用方法_skip:用于跳过元素
如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流:
Stream skip(long n);
如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流。
Stream流中的常用方法_concat:用于把流组合到一起
如果有两个流,希望合并成为一个流,那么可以使用Stream接口的静态方法concat
static Stream concat(Stream<? extends T> a, Stream<? extends T> b)