美文网首页
Lambda表达式的几种方式-003

Lambda表达式的几种方式-003

作者: 小尾巴1024 | 来源:发表于2019-01-22 16:50 被阅读0次

    方式一:无参函数的写法

    //无参数方式
    new Thread(
            () -> System.out.println("Hello,Wei") // 省略接口名和方法名
    ).start();
    //Java7的写法
    new Thread(new Runnable(){   // 接口名
        @Override
        public void run(){// 方法名
            System.out.println("Hello,Wei");
        }
    }).start();
    

    方式二:有参函数的写法

    //两个参数
    List<String> list = Arrays.asList("I", "am", "zeng", "wei");
    Collections.sort(list, (s1, s2) ->{// 省略参数表的类型
        if(s1 == null)
            return -1;
        if(s2 == null)
            return 1;
        return s1.length()-s2.length();
    });
    //Java7写法
    List<String> list = Arrays.asList("I", "am", "zeng", "wei");
    Collections.sort(list, new Comparator<String>(){
      @Override
        public int compare(String s1, String s2){  // 方法名
            if(s1 == null)
                return -1;
            if(s2 == null)
                return 1;
            return s1.length()-s2.length();
        }
    });
    

    方法三:参数带类型写法

    方式二的带参是没有写参数类型的,这在lambda表达式中是被允许的,因为Lambda可以根据上下文推断出类型,但是也可以把类型写上

    //参数带上类型
    List<String> list = Arrays.asList("I", "am", "zeng", "wei");
    Collections.sort(list, (String s1, String s2) ->{
        if(s1 == null)
            return -1;
        if(s2 == null)
            return 1;
        return s1.length()-s2.length();
    });
    

    方式四:代码块的写法

    方式一可以看到,只有一行代码,所以不用加上大括号‘{}’,但是如果有多选代码,如方式二和方式三,就要加上大括号‘{}’。

    new Thread(
            () -> {  // 多行代码加上‘{}’
          System.out.println("Hello,Wei") ;
          System.out.println("Hello,I am fine");
      }
    ).start();
    

    方式五:自动返回值和手动返回值写法

      // 自动返回(a/b)     
     MathOperation division = (int a, int b) -> a / b;
    // 手动添加return返回
    MathOperation multiplication = (int a, int b) -> { return a * b; };
    //函数接口
    interface MathOperation {
          int operation(int a, int b);
       }
    

    方式六:双冒号表达式

    //双冒号可以调用方法
    public class LambdaTest {
        
      public static void printStr(String str) {
        System.out.println(str);
      }
    
      public static void main(String[] args) {
    
        List<String> list = Arrays.asList("aaa","bbb","ccc");
        // 1.通常的遍历方式
        for(String str: list) {
          LambdaTest.printStr(str);
        }
        // 2.使用Lambda表达式遍历
        list.forEach(str -> {
          LambdaTest.printStr(str);
        });
        // 3.使用::遍历
        list.forEach(LambdaTest::printStr);
        // 下面的方法和上面等价,使用的是函数式编程
        Consumer<String> methodParam = LambdaTest::printStr; //方法参数
        list.forEach(x -> methodParam.accept(x));//方法执行accept
      }
    }
    //双冒号调用构造方法
    () -> new HashMap<>();
    HashMap::new
    

    参考:https://segmentfault.com/a/1190000015308249
    http://www.runoob.com/java/java8-lambda-expressions.html

    相关文章

      网友评论

          本文标题:Lambda表达式的几种方式-003

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