博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lambda 表达式
阅读量:5336 次
发布时间:2019-06-15

本文共 3386 字,大约阅读时间需要 11 分钟。

1. Lambda表达式 

 Lambda表达式是jdk1.8里面的一个重要的更新,这意味着java也开始承认了函数式编程,并且尝试引入其中。

  函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

2. 函数式接口

  “函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。

  JDK1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合 FunctionalInterface 的规范便会报错。

3. @FunctionalInterface  

/* * 该注解用于表明这个接口是一个功能接口 * 由Java语言规范定义 * * An informative annotation type used to indicate that an interface * type declaration is intended to be a functional interface as * defined by the Java Language Specification. * * 从概念上讲,一个功能接口只有一个准确的抽象方法 * * Conceptually, a functional interface has exactly one abstract method.  * * 如果一个接口声明一个 java.lang.Object 的方法,则该方法不计入接口的抽象方法计数 * 因为任何接口的实现都会有来自 java.lang.Object 或其他地方的实现。 * * If an interface declares an abstract method overriding one of the * public methods of {@code java.lang.Object}, that also does * not count toward the interface's abstract method count * since any implementation of the interface will have an * implementation from {@code java.lang.Object} or elsewhere. */

4. 代码示例

package com.skd.lambda;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;public class LmabdaTest {    public static String[] params = new String[]{"aa", "bb", "cc"};    public static void main(String[] args) {        start();        compare();        testLamda();        testLamdaWithParams();    }    /**     * 创建线程     */    public static void start() {        final int i = 0;        /**         * 常规写法         */        new Thread(new Runnable() {            @Override            public void run() {                System.out.println("常规写法:i=" + i);            }        }).start();        // 方法没有参数的示例,参数对应的()为空        /**         *  不带参数类型的Lambda表达式         *  ()-> 方法体         */        new Thread(() -> System.out.println("不带参数类型的Lambda表达式:i=" + i)).start();        /**         *  带参数类型的Lambda表达式         *  (类名信息)()->{         *      方法体         *  }         */        new Thread((Runnable) ()->{            System.out.println("带参数类型的Lambda表达式:i=" + i);        }).start();    }    // 方法有参数的示例    /**     * 常规的Collections的排序的写法,需要对接口方法重写     */    public static void compare() {        List
list = Arrays.asList(params); Collections.sort(list, new Comparator
() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }); for (String string : list) { System.out.println(string); } } /** * 不带参数类型的Lambda表达式 * 如果方法有返回值,自动将结果返回 * (参数...)-> 方法体 */ public static void testLamda() { List
list = Arrays.asList(params); Collections.sort( list, (a, b) -> b.compareTo(a) ); for (String string : list) { System.out.println(string); } } /** * 带参数类型的Lambda表达式 * 如果方法有返回值,必须显示将结果返回 * (类名信息)(参数类型 参数...)->{
* 方法体 * } */ public static void testLamdaWithParams() { List
list = Arrays.asList(params); Collections.sort(list, (Comparator
) (String a, String b) -> { return b.compareTo(a); } ); for (String string : list) { System.out.println(string); } }}

 

转载于:https://www.cnblogs.com/virgosnail/p/10183999.html

你可能感兴趣的文章
Android NETWORK_PROVIDER onLocationChanged不会被调用的部分原因
查看>>
快速排序算法所有版本的c/c++实现
查看>>
JVM基础知识2 垃圾收集器与内存分配策略
查看>>
Java课程设计——象棋(201521123042 姚佳希)
查看>>
IFrame实现页面无刷新
查看>>
JAVA如何正确地写出单例模式(转)
查看>>
写技术札记的生涯开始了!
查看>>
python之模块csv之CSV文件一次写入多行
查看>>
Axure 验证码、进度条、分页条(翻页)、搜索框、选项卡
查看>>
js发送邮件
查看>>
EXT.NET 使用 Ueditor编辑器,并在后台获取的方法
查看>>
[转]简易下拉框式日期选择器(带闰平年判断)
查看>>
0A03 无监督学习:分类(1) 线性回归OLS
查看>>
常用SQL语句
查看>>
Java生鲜电商平台-一次代码重构的实战案例
查看>>
教你如何写框架------用中文构建脚本(更新版)
查看>>
《HTML and CSS Design and Build Websites》学习笔记之HTML版本声明
查看>>
lintcode 骰子求和
查看>>
正则表达式的学习与深化笔记
查看>>
C++(笔)001.
查看>>