美文网首页
stream api的使用(使用lambda)

stream api的使用(使用lambda)

作者: Let_me_think | 来源:发表于2018-08-03 17:53 被阅读0次

    stream 的获取

    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.IntStream;
    import java.util.stream.Stream;
    public class Main {
        /**
         * 数组转流
         */
        static void gen1() {
            String[] arr = {"1", "2", "3"};
            Stream<String> stream = Stream.of(arr);
            stream.forEach(System.out::println);
        }
    
        /**
         * list 转流
         */
        static void gen2() {
            List<String> list = Arrays.asList("1", "2", "3");
            Stream<String> stream = list.stream();
            stream.forEach(System.out::println);
        }
    
        /**
         * 用generate生成流
         */
        static void gen3() {
            Stream<Integer> stream = Stream.generate(() -> 1);
            stream.limit(10).forEach(System.out::println);
        }
    
    
        /**
         * 用iterate生成流
         */
        static void gen4() {
            Stream<Integer> stream = Stream.iterate(1, x -> x + 1);
            stream.skip(20).forEach(System.out::println);
        }
    
        /**
         * 从文件生成流
         *
         * @throws Exception
         */
        static void gen5() throws Exception {
            String s = "1234";
            IntStream intStream = s.chars();
    
            intStream.forEach(System.out::println);
            Files.lines(Paths.get("/Users/xxxxxx/src/main/java/lambda/Main.java")).forEach(System.out::println);
    
        }
    }
    

    上一篇文章也提到过,stream的延迟操作

    //没有遇到终止操作 不执行filter内的代码
    Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> {
       System.out.println("不会输出");
       return x % 2 == 0;
    });
    //遇到终止操作才执行  forEach 是终止操作
    Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> {
      System.out.println("输出");
      return x % 2 == 0;
    }).forEach(System.out::println);
    

    求和

    //输出1-6偶数之和
    int sum =  Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).mapToInt(x->x).sum();
    System.out.println(sum);
    

    最大值

    //输出1-6最大值
    int max =  Arrays.asList(1, 2, 3, 4, 5, 6).stream().max((a,b)->a-b).get();
    System.out.println(max);
    

    最小值

    //输出1-6最小值
    int min =  Arrays.asList(1, 2, 3, 4, 5, 6).stream().min((a,b)->a-b).get();
    System.out.println(min);
    

    查找元素

    /**
       * 输出1-6 找到任何偶数元素就返回
       * findAny:查找任何一个就返回 Optional
       * findFirst:查找到第一个就返回 Optional
       * anyMatch:匹配上任何一个则返回 Boolean
       * allMatch:匹配所有的元素则返回 Boolean
       */
    Optional<Integer> optional = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).findAny();
    System.out.println(optional.get());
    

    查找第一个元素

    //输出1-6 第一个偶数
    Optional<Integer> optional = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).findFirst();
    System.out.println(optional.get());
    

    排序

    //过滤出所有偶数,再倒序
    List<Integer> sortList = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).sorted((a, b) -> b - a).collect(Collectors.toList());
    System.out.println(sortList);
    

    相关文章

      网友评论

          本文标题:stream api的使用(使用lambda)

          本文链接:https://www.haomeiwen.com/subject/qtluvftx.html