zoukankan      html  css  js  c++  java
  • java8-----lambda语法

            // -----lambda语法1------ https://www.baidu.com/link?url=6iszXQlsmyaoWVZMaPs3g8vLRQXzdzTnKzQYTF8lg-5QQthjAu1KMSxRbEU_PznfUS4-KVH1hfn64wdAOahiCq&wd=&eqid=d6aa9d87000231f1000000065dfc8e0a
    
            //1.lambda语法包括3个部分:
            //  (参数列表)->{方法体;}
            //  只有一个参数时,()可以省略
            //  方法体只有一行时可以省略{;}
    
            //2.当一个参数都没有的时候,仍然可以使用lambda表达式
            //   使用lambda表达式启动一个新的线程
            //   ()对应run方法的参数
            //   ->后面表示run的方法体
            new Thread(() -> System.out.println("使用lambda启动线程")).start();
    
            //3.如果要使用lambda来声明接口那么接口中只能有一个抽象方法
            //  因为函数接口是只有一个抽象方法的接口(抽象的方法只能有一个,可以有其他的用default修饰的方法)
            String s = "lambda test";
            int i = 100;
            MyInterface myInterface = (str, m) -> {
                //i++; 错误,无法对i的值进行修改
                System.out.println(i);
                System.out.println(str + "  " + m);
                return str + "----" + str;
            };
            String result1 = myInterface.test(s, 0);
            System.out.println(result1);
             //-----lambda语法2------ https://www.cnblogs.com/kangkaii/p/8419082.html
    
            String[] arr1 = {"program", "creek", "is", "a", "java", "site"};
            Arrays.sort(arr1, (String m, String n) -> Integer.compare(m.length(), n.length()));
            System.out.println(Arrays.toString(arr1));
    
            //2,参数类型可以推断
            //如果参数的类型可以根据上下文推断出来,则可以省略掉类型。
            //在上面的代码中,参数 m 与 参数 n 可以推测出来是String类型,所以可以省略。这样会让代码变得更加简洁,并且也更像是一个lambda表达式。
            String[] arr2 = { "program", "creek", "is", "a", "java", "site" };
            Arrays.sort(arr2, (m, n) -> Integer.compare(m.length(), n.length()));
            System.out.println(Arrays.toString(arr2));
    
    
            //3,存在多行代码
            //如果sort() 里面的代码一行写不下的话,可以多行,但需要{} 括起来。而且代码应该有明确的返回语句。
            String[] arr3 = { "program", "creek", "is", "a", "java", "site" };
            Arrays.sort(arr3, (String m, String n) -> {
                if (m.length() > n.length())
                    return -1;
                else
                    return 0;
            });
            System.out.println(Arrays.toString(arr3));
    
            //4,单个参数并可推断类型
            //单个参数的lambda表达式,在参数类型可以推断出来的时候,可以省略参数 “x” 的括号。
            String[] arr4 = { "program", "creek", "is", "a", "java", "site" };
            Stream.of(arr4).forEach(x -> System.out.println(x));
    
            //5,方法引用
            //利用方法引用,上面的代码也可以被写成如下形式:
            Stream.of(arr4).forEach(System.out::println);
    工厂方法返回类型作用
    toList List<T> 把流中的所有元素收集到一个List
    toSet Set<T> 把流中的所有元素收集到一个Set,删除重复项
    toCollection Collection<T> 把流中所有元素收集到给定的容器中menuStream.collect(toCollection(), ArrayList::new)
    counting Long 计算流中的元素个数
    sumInt Integer 对流中的一个整数进行求和
    averagin Double 计算流中integer属性的平均值
    summarizingInt IntSummaryStatistics 收集关于流中 Integer 属性的统计值,例如最大、最小、 总和与平均值
    joining String 连接对流中每个元素调用 toString 方法所生成字符串collect(joining(", "))
    maxBy Optoinal<T> 一个包裹了流中按照给定比较器选出的最大元素的 Optional, 或如果流为空则为 Optional.empty()
    minBy Optional<T> 一个包裹了流中按照给定比较器选出的最小元素的 Optional, 或如果流为空则为 Optional.empty()
    reducing   从一个作为累加器的初始值开始,利用 BinaryOperator 与流 中的元素逐个结合,从而将流归约为单个值累加int totalCalories = menuStream.collect(reducing(0, Dish::getCalories, Integer::sum));
    collectingAndThen   包裹另一个收集器,对其结果应用转换函数int howManyDishes = menuStream.collect(collectingAndThen(toList(), List::size))
    groupingBy Map<K, List<T>> 根据项目的一个属性的值对流中的项目作问组,并将属性值作 为结果 Map 的键
    partitioningBy Map<Boolean,List<T> 根据对流中每个项目应用谓词的结果来对项目进行分区
     
     
    链接:https://www.jianshu.com/p/28bcf21dfd03 
    
    
  • 相关阅读:
    C#中跨线程访问控件问题解决方案
    asp.net网站中配置文件的加密
    C#中XML使用总结
    连接加密Access数据库的字符串设置方法
    asp.net中常用的26个优化性能的方法
    C#中Math的使用总结
    关于ASP.NET页面打印技术的总结
    域登录获取用户名字的控制
    Web界面设计基本原则
    域登录获得用户名称
  • 原文地址:https://www.cnblogs.com/hahajava/p/12074349.html
Copyright © 2011-2022 走看看