首页 > 其他分享 >jdk8的新特性之-lambda表达式的使用

jdk8的新特性之-lambda表达式的使用

时间:2022-08-27 22:59:14浏览次数:85  
标签:names2 add jdk8 线程 println 表达式 lambda

Lambda 表达式允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

语法

lambda 表达式的语法格式如下:

(parameters) -> expression  
或  
(parameters) ->{ statements; }

以下是lambda表达式的重要特征:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

主要还是贴几个例子,加深自己的理解

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * jdk 1.8 新特性
 * Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
 * lambda 表达式的语法如下:
 * (parameters) -> expression
 * 或
 * (parameters) ->{ statements; }
 *
 * 可以把 Lambda 表达式理解为是一段可以传递的代码(将代码作为实参),
 * 也可以理解为函数式编程,将一个函数作为参数进行传递。
 *
 */
public class jdkNewFuture {
    public static void main(String[] args) {
        List<String> names1 = new ArrayList<>();
        names1.add("Gooogle");
        names1.add("Runoob");
        names1.add("Taobao");
        names1.add("Baidu");
        names1.add("Sina");
        System.out.println("使用jdk7实现排序");
        sortByJdk7Grammer(names1);
        for (String name:names1){
            System.out.println(name);
        }

        System.out.println("使用jdk8实现排序");
        List<String> names2 = new ArrayList<>();
        names2.add("Gooogle");
        names2.add("Runoob");
        names2.add("Taobao");
        names2.add("Baidu");
        names2.add("Sina");
        sortByJdk8Grammer(names2);
        for (String name:names2){
            System.out.println(name);
        }
        /**
         * 使用匿名内部类新建线程
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程1,基于匿名内部类的线程已经新建!");
            }
        }).start();
        /**
         * 使用labmda表达式新建线程:从上面的正常建立方法可以看出来
         * new Thread() 括号里需要传递的是一个Runnable()类型的对象,
         * 这个对象没有需要传递进去的参数,所以lambda表达式的格式的开头是 ()->
         * 然后是{},他的具体逻辑为 执行System.out.println() 操作
         * 所以写好之后是() -> System.out.println("线程2,基于lambda表达式的线程已经新建!")
         * 将这段代码作为 new Thread 的参数
         */
        new Thread(()-> System.out.println("线程2,基于lambda表达式的线程已经新建!")).start(); 
    }

    /**
     * 使用jdk7 实现排序,即重写compare方法
     * @param names
     */
    private static void sortByJdk7Grammer(List<String> names){
        Collections.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
    }

    /**
     * 使用lambda表达式 重写排序方法
     * 参数为(s1,s2)
     * 代码执行的逻辑为 s1.compareTo(s2)
     * 所以修改成lambda表达式之后为(s1,s2)->s1.compareTo(s2)
     * @param names
     */

    private static void sortByJdk8Grammer(List<String> names){
        Collections.sort(names,(s1,s2)->s1.compareTo(s2));
    }

}

 

内容来源:

深入理解Java Lambda表达式 - 知乎 (zhihu.com)

Java Lambda 表达式 | 菜鸟教程 (runoob.com)

 

标签:names2,add,jdk8,线程,println,表达式,lambda
From: https://www.cnblogs.com/charler/p/16631704.html

相关文章

  • Luogu1310 表达式的值 - 模拟 -
    题目链接:https://www.luogu.com.cn/problem/P1310题解:先考虑没有括号的情况,显然可以根据+的位置划分成若干段,每段的结果必须为0如何处理?因为每段+之间必然均为,答案就......
  • Java --- Lambda
    学习Lambda的理由绝大多数公司代码的主流风格。大数据量下处理集合效率高,优秀的高并发解决。代码的可读性增强。消灭嵌套地狱。>形状的if或者for再也不用写了。为了......
  • 计算四则表达式值 Golang
    思路:先转逆波兰,再求值packagemainimport( "fmt" "strconv" "strings")funcmid2fix(sstring)[]string{ res:=[]string{} exp:=strings.Fields(s) ss......
  • Lambda表达式
    作用简化匿名内部类的代码写法格式(匿名内部类被重写方法的形参列表)->{被重写方法的方法体代码}注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式......
  • C#验证邮箱格式正则表达式
    1///<summary>2///验证邮箱格式3///</summary>4///<paramname="email"></param>5///<returns></returns>6......
  • 匿名函数lambda
    Golang//https://blog.csdn.net/yyclassmvp/article/details/124942527sum:=func(xint,yint)int{returnx*y}Nodejsconstsum=(x,y)=>x*y;Python......
  • LeetCode 150. 逆波兰表达式求值
    思路:当字符串为运算符号是弹出栈中两个数字进行运算stoi("1")将string转换为intclassSolution{public:intevalRPN(vector<string>&tokens){stack<......
  • Java 基础 - 正则表达式
     一、正则表达式 正则表达式是Java中一门独立的语言,用于检测特定字符串是否符合规则。正则表达式就是用来定义匹配的规则的。1.1规则定义   1.2用法  ......
  • 【转载】JDK8中computeIfAbsent方法
    转载https://blog.csdn.net/sinat_34241861/article/details/107821860麻烦的方法Map<String,List<String>>map=newHashMap<>();List<String>list;//一般这......
  • 正则表达式手册
        来源:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html......