Stream学习笔记

1. 创建Stream实例的五种方式

  @Test
    public void test1(){
        // 创建Stream对象的第一种方式
        List<String> list = Lists.newArrayList("A", "B", "C");
        Stream<String> stream1 = list.stream();

        // 创建Stream对象的第二种方式
        String[] arr = {"A", "B"};
        Stream<String> stream2 = Arrays.stream(arr);

        // 创建Stream对象的第三种方式

        Stream<String> stream3 = Stream.of("A", "B");

        // 创建Stream对象的第四种方式
        // iterate会无限执行,所以limit只取前5个
        Stream<Integer> stream4 = Stream.iterate(0, x -> x * x).limit(5);

        // 创建Stream对象的第五种方式
        // generate也会无限执行,所以limit只取前5个
        Stream<Double> stream5 = Stream.generate(Math::random).limit(5);
    }

2. Stream常用Api

 @Test
    public void test2() {
        List<String> list = Lists.newArrayList("abc", "bcd", "efg", "a12", "bcd");
        // 1.过滤
        list.stream().filter(x -> x.contains("b")).forEach(System.out::println);

        // 2.取前n
        list.stream().limit(1).forEach(System.out::println);

        //3. 跳过前n个
        list.stream().skip(2).forEach(System.out::println);

        //4. distinct 去重
        list.stream().distinct().forEach(System.out::println);

        //5. map映射
        list.stream().map(x -> x.toUpperCase()).forEach(System.out::println);

        System.out.println("-----------------------");
        //6. flatMap映射(与scala中的map,flatMap一样的),返回的是个Stream
        list.stream().flatMap(x -> Stream.of(x.toUpperCase())).forEach(System.out::println);


        //7.排序  sorted() ---> 自然排序
        List<Integer> list1 = Lists.newArrayList(12, 1, 0, -1, 2, 56, 34);
        list1.stream().sorted().forEach(System.out::println);

        //8.排序 sorted(Comparator com)  --> 按指定规则排序
        list1.stream().sorted((e1, e2) -> -Integer.compare(e1, e2)).forEach(System.out::println);

        //9. 匹配与查找
        // list中的所有元素都含有"a"
        boolean ret = list.stream().allMatch(x -> x.contains("a"));
        System.out.println(ret);

        // list只要有一个元素包含有"a",就true
        ret = list.stream().anyMatch(x -> x.contains("a"));
        System.out.println(ret);

        //list中没有以"A"开头的元素
        ret = list.stream().noneMatch(x -> x.startsWith("A"));
        System.out.println(ret);

        //第一个元素
        Optional<String> first = list.stream().findFirst();
        System.out.println(first.get());

        //找任意一个元素
        Optional<String> any = list.parallelStream().findAny();
        System.out.println(any.get());

        // 找最大值
        Optional<Integer> max = list1.stream().max(Integer::compareTo);
        // 上面这行代码是下面代码的简写
//        Optional<Integer> max1 = list1.stream().max((e1, e2) -> Integer.compare(e1, e2));
        System.out.println(max.get());

        //10 , 归约
        Optional<Integer> reduce = list1.stream().reduce((x, y) -> x + y);  // list1中元素求和
        System.out.println(reduce.get());

        Integer sum = list1.stream().reduce(0, Integer::sum);  // list1中元素求和
        System.out.println(sum);

        Integer sum2 = list1.stream().reduce(10, Integer::sum);  // 10 + list1中元素求和
        System.out.println(sum2);

        //11. collect--> 将stream转成list集合
        List<Integer> collect = list1.stream().map(x -> x * 2).collect(Collectors.toList());
        collect.forEach(System.out::println);

    }

猜你喜欢

转载自www.cnblogs.com/z-qinfeng/p/11762114.html