文档章节

Lambda表达式

o
 osc_fmg49rzg
发布于 2019/03/20 10:03
字数 558
阅读 12
收藏 0

精选30+云产品,助力企业轻松上云!>>>

一、Lambda表达式

1)函数式接口

函数式接口(Functional Interface)是只包含一个方法的抽象接口。

比如Java标准库中的java.lang.Runnable,java.util.concurrent.Callable就是典型的函数式接口。

在Java 8中通过@FunctionalInterface注解,将一个接口标注为函数式接口,该接口只能包含一个抽象方法。

函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。简化匿名内部类

 

2)lambda表达式

“lambda表达式”是一段可以传递的代码,因为他可以被执行一次或多次。其语法结构如下:

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

括号里的参数可以省略其类型,编译器会根据上下文来推导参数的类型,你也可以显式地指定参数类型,如果没有参数,括号内可以为空。方法体,如果有多行功能语句用大括号括起来,如果只有一行功能语句则可以省略大括号。)

例子:

public class J8test {
 
        //根据名字长度倒序排序,原来要new一个匿名内部类来比较
    @Test
    public void test1() {
        List<String> names = Arrays.asList("lucy","Mia","Isabella","Jackson");
        names.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.length()-o1.length();
            }
        });
        names.stream().forEach(str -> System.out.println(str));
    }
     
    //使用lambda表达式后
    @Test
    public void test2() {
        List<String> names = Arrays.asList("lucy","Mia","Isabella","Jackson");
        names.sort((s1,s2)->s2.length()-s1.length());
        names.stream().forEach(str -> System.out.println(str));
    }
}
public class J8test  {
     
    public static void main(String[] args) {
 
        //启动一个新线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<10;i++) {
                    System.out.println("111");
                }
                 
            }
        }, "线程1").start();
         
        //用lambda表达式启动一个新线程
        new Thread(()-> {
            for(int i=0;i<10;i++) {
                System.out.println("111");
            }
        }) .start();
    }
}

3)方法引用

方法引用是lambda表达式的一种简写形式。 如果lambda表达式只是调用一个特定的已经存在的方法,则可以使用方法引用。

使用"::"操作符将方法名和对象或类的名字分隔开来

有四种情况:

对象::实例方法、类::静态方法、类::实例方法、类::new

public class J8test  {
     
    @Test
    public void test3() {
        List<String> names = Arrays.asList("lucy","Mia","Isa","Jackson");
        //names.sort((s1,s2)->s1.compareToIgnoreCase(s2));
        names.sort(String::compareToIgnoreCase);//等价上面一行代码
        names.stream().forEach(str -> System.out.println(str));
    }
     
}

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

格式编号始终显示2个小数位 - Format number to always show 2 decimal places

问题: I would like to format my numbers to always display 2 decimal places, rounding where applicable. 我想将数字格式化为始终显示2个小数位,并在适用的情况下四舍五入。 Examples...

富含淀粉
58分钟前
22
0
Docker可视化工具Portainer

1 前言 从没想到Docker也有可视化的工具,因为它的命令还是非常清晰简单的。无聊搜了一下,原来已经有很多Docker可视化工具了。如DockerUI、Shipyard、Rancher、Portainer等。查看对比了一番...

南瓜慢说
今天
20
0
日志系统新贵 Loki,真香!!

最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。...

庞陆阳
今天
14
0
jQuery获取select onChange的值 - jQuery get value of select onChange

问题: I was under the impression that I could get the value of a select input by doing this $(this).val(); 我的印象是我可以通过执行$(this).val();来获取选择输入的值$(this).val()......

javail
今天
13
0
道翰天琼解密宇宙信息大脑三者最核心奥秘,破解认知智能基础理论(群聊形式)

三体论是探索研究宇宙,信息和人类大脑三者关系的理论体系。是认知智能的奠基理论体系之一。宇宙和信息,信息和人类大脑,人类大脑和宇宙,三者之间存在着某种未被完全揭示的奥秘。三体论的核...

jackli2020
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部