Stream API
stream介绍
- java类库的补充,写出更简洁高效的代码。
处理集合的关键抽象概念,操作集合像sql,高效处理数据的方式。
什么是stream
stream 关注的是对数据的运算,与cpu打交道。而集合;存储;内存
- 特点
- 自己不会存储元素
- 不可变性
- 操作的延迟的,调用了终止操作才会执行。
Stream执行流程
- 实例化
- 中间操作
- 终止操作:一旦终止,产生结果之后就不能用了。
Stream的中间操作
代码
public class test {public static void main(String[] args) {/*** 创建流的举例*///1.通过集合List<String> l = new ArrayList<>();//顺序流Stream<String> stream = l.stream();//并行流Stream<String> stringStream = l.parallelStream();//2.通过数组Integer[] integers = {1, 2, 3, 4, 4};Stream<Integer> stream1 = Arrays.stream(integers);//3.通过Stream.ofStream<Integer> integers1 = Stream.of(integers);//4.无线流//迭代Stream.iterate(0, T -> T + 2).limit(10).forEach(System.out::println);//生成Stream.generate(Math::random).limit(10).forEach(System.out::println);/*** 中间操作*///1.筛选和切片//filter(Predicate p) 从流中过滤排除某些元素stream1.filter(t -> Integer.compare(t, 1) > 0).forEach(System.out::println);//limit(n) 截断流,使元素不超过给定数量Stream<Integer> stream2 = Arrays.stream(integers);stream2.filter(t -> Integer.compare(t, 1) > 0).limit(2).forEach(System.out::println);// skip(n) 跳过n个元素,不足n个,返回一个空流System.out.println("*********************");Stream<Integer> stream3 = Arrays.stream(integers);stream3.filter(t -> Integer.compare(t, 1) > 0).skip(4).forEach(System.out::println);//distinct 筛选,通过hashcode和equals 去除重复的。System.out.println("*********************");Stream<Integer> stream4 = Arrays.stream(integers);stream4.filter(t -> Integer.compare(t, 1) > 0).distinct().forEach(System.out::println);//2.映射//map(Function f)接收一种元素转换成另外一种形式System.out.println("*********************");List<String> list = Arrays.asList("aa", "bb");list.stream().map(s -> s.toUpperCase()).forEach(System.out::println);//flatmap(Function f)接收一种元素,当返回一个流时,打开中括号。list.stream().flatMap(test::getCharacterStream).forEach(System.out::println);//3.排序//sorted/sorted(comparator com)System.out.println("*********************");List<Integer> list1 = Arrays.asList(1, 31, 5, 123, 2, 3123);list1.stream().sorted().forEach(System.out::println);/*** 终止操作*///1.匹配与查找//allMatch所有元素都匹配System.out.println("*********************");boolean b = list1.stream().allMatch(i -> i > 1);System.out.println(b);//anyMatch任意元素匹配boolean b1 = list1.stream().anyMatch(i -> i > 2);System.out.println(b1);//noneMatch没有元素匹配boolean b2 = list1.stream().noneMatch(i -> i > 100000);System.out.println(b2);//findFirst()找第一个Optional<Integer> first = list1.stream().findFirst();//findAny找任意一个Optional<Integer> any = list1.stream().findAny();//max(comparator)最大list1.stream().max(Integer::compareTo);//min(comparator)最小list1.stream().min(Integer::compareTo);//count()总条数long count = list1.stream().count();//forEach(Consumer)内部迭代list1.stream().forEach(System.out::println);//2.归约//reduce(identity, BinaryOperator)求和,有初始值Integer reduce1 = list1.stream().reduce(10, Integer::sum);System.out.println(reduce1);//reduce(BinaryOperator)求和,没有初始值Optional<Integer> reduce = list1.stream().reduce((o1, o2) -> o1 + o2);System.out.println(reduce);}public static Stream<Character> getCharacterStream(String str) {List<Character> list = new ArrayList<>();for (Character c : str.toCharArray()) {list.add(c);}return list.stream();}}
