zoukankan      html  css  js  c++  java
  • java中使用Lambda表达式的5种语法

    1,标准写法

    思考下述情况:

    String[] arr = {"program", "creek", "is", "a", "java", "site"};
    Arrays.sort(arr, (String m, String n) -> Integer.compare(m.length(), n.length()));
    System.out.println(Arrays.toString(arr));
    

    lambda表达式的标准写法由下面几点构成:

    • 以逗号分隔,以()关闭的形参:(Dog m, Dog n)
    • 箭头标记:->
    • 主体部分则是一个单表达式或者声明代码块。如下是单表达式形式:Integer.compare(m.getWeight(), n.getWeight())

    输出:
    [a, is, java, site, creek, program]

    2,参数类型可以推断

    如果参数的类型可以根据上下文推断出来,则可以省略掉类型。
    在上面的代码中,参数 m 与 参数 n 可以推测出来是String类型,所以可以省略。这样会让代码变得更加简洁,并且也更像是一个lambda表达式。

    String[] arr = { "program", "creek", "is", "a", "java", "site" };
    Arrays.sort(arr, (m, n) -> Integer.compare(m.length(), n.length()));
    System.out.println(Arrays.toString(arr));
    

    3,存在多行代码

    如果sort() 里面的代码一行写不下的话,可以多行,但需要{} 括起来。而且代码应该有明确的返回语句。

    String[] arr = { "program", "creek", "is", "a", "java", "site" };
    Arrays.sort(arr, (String m, String n) -> {
    	if (m.length() > n.length())
    		return -1;
    	else
    		return 0;
    });
    System.out.println(Arrays.toString(arr));
    

    输出:

    [program, creek, java, site, is, a]
    

    4,单个参数并可推断类型

    Parenthesis can be omitted for single parameter lambda expression when types can be inferred.
    单个参数的lambda表达式,在参数类型可以推断出来的时候,可以省略参数 “x” 的括号。

    String[] arr = { "program", "creek", "is", "a", "java", "site" };
    Stream<String> stream = Stream.of(arr);
    stream.forEach(x -> System.out.println(x));
    

    输出:

    a
    is
    java
    site
    creek
    program
    

    5,方法引用

    利用方法引用,上面的代码也可以被写成如下形式:

    Stream<String> stream = Stream.of(arr);
    stream.forEach(System.out::println);
    

    6,没有参数

    当一个参数都没有的时候,仍然可以使用lambda表达式。如下:

    () -> {for(int i=0; i<10; i++) doSomthing();}
    

    原文地址: 5 Different Syntax of Lambda Expression

  • 相关阅读:
    study os
    open source [license]
    work serises------------patch
    interest in history-----------先秦
    python学习-----------argparse
    problems fixed
    work serises------------adb 使用
    零碎积累之--------------java环境相关
    Hash Table Five Finish
    Hash Table Four
  • 原文地址:https://www.cnblogs.com/kangkaii/p/8419082.html
Copyright © 2011-2022 走看看