最近Java 11都出来了,java 8 的很多新特性还没用过,比如接口可以有方法体啦,default默认方法。

当然最大的特性就是支持函数式编程了。Java 8 提供了lambda表达式和方法引用来支持函数式编程。

你要问我啥是函数式编程,我也不知道啊,我的理解大概就是跟匿名类有点像吧。可以用更少的代码

实现功能。增加代码可读性(我不这么认为啊,感觉更看不懂了。。。)

要想看懂lambda表达式,我们还需要了解一下函数式接口,啥是函数式接口呢?我母鸡啊,大概就是

只有一个抽象方法的接口吧。当然还有其他什么继承Object类的公有方法不算拉什么的大家自己百度去。

废话不多说,以前我们创建一个线程需要4行:

    new Thread() {
public void run() {
System.out.println("hello");
}
}.start();

现在:

    new Thread(() -> System.out.println("hello")).start();

咦,我们的run方法呢,为啥可以不用重写run方法呢,因为Runnable是一个函数式接口,jvm自动搞定了。

可以看到Runnable接口上面多了一个注解,这个注解就是函数式接口了,这个接口只有一个抽象方法。

好了,上代码:

package com.test;

import java.util.ArrayList;
import java.util.List; /**
* @program: java数据结构
* @description: lambda表达式demo
* @author: Wu Lei
* @create: 2018-10-24 15:23
*/
public class LambdaTest {
static class Person {
private int age;
private String name; Person(int age, String name) {
this.age = age;
this.name = name;
} int getAge() {
return age;
} void setAge(int age) {
Person.this.age = age;
} String getName() {
return name;
} public void setName(String name) {
Person.this.name = name;
} static int compareByAge(Person a, Person b) {
return a.age - b.age;
}//已经实现的compare 方法,可以使用方法引用,因为Comparetor是一个函数式接口 @Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
} public static void main(String[] args) {
new Thread(() -> System.out.println("hello")).start();//lambda方式创建一个线程
LambdaTest lt = new LambdaTest();
/*
* 方法引用demo
* */
List<Person> list = new ArrayList<>();
list.add(new Person(12, "jack"));
list.add(new Person(8, "lily"));
list.add(new Person(15, "lei"));
list.add(new Person(7, "roma")); list.sort(Person::compareByAge);//方法引用
list.forEach(person -> System.out.println(person.getName()));//自己都看不懂了,牛逼
list.forEach(System.out::println);//需要重写toString()方法 } }

Java lambda尝鲜的更多相关文章

  1. Java 9 尝鲜之JShell交互式编程环境

    JShell--Java 9 的交互式编程环境 本文要求读者有基本的 Java 知识. Tips Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容.也就是说,用 Java 9 写的代 ...

  2. Java 8特性尝鲜:新新IO

    Java 8特性尝鲜:新新IO 在这个专题前面的文章中,我们已经看到,使用Java8的lambda表达式对现有的JDK1.2 I/O库的提升,主要是可以使用lambda表达式来构造java.io.Fi ...

  3. Java协程编程之Loom项目尝鲜

    前提 之前很长一段时间关注JDK协程库的开发进度,但是前一段时间比较忙很少去查看OpenJDK官网的内容.Java协程项目Loom(因为项目还在开发阶段,OpenJDK给出的官网https://ope ...

  4. JEP解读与尝鲜系列4 - Java 16 中对于 Project Valhalla 的铺垫

    这是 JEP 解读与尝鲜系列的第 4 篇,之前的文章如下: JEP解读与尝鲜系列 1 - Java Valhalla与Java Inline class JEP解读与尝鲜系列 2 - JEP 142 ...

  5. 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅

    本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动. 1.引言   Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发( ...

  6. C++17尝鲜

    https://cloud.tencent.com/developer/article/1351910 [译]C++17,optional, any, 和 variant 的更多细节 用户261520 ...

  7. Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

    前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spr ...

  8. Leetcode多线程题库练习(新功能尝鲜)& 个人感悟

    大家好, 我是方子龙.很久没有自己写文章了. 一面是因为工作上的需求开发任务比较重,下班回家基本上就躺床玩几把王者,度过闲暇时光. 二面是一有点时间就自己主动地去看书和学习,知道自己还缺少很多知识,由 ...

  9. CabloyJS 4.12震撼发布,及新版教程尝鲜

    引言 凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写 | Atwood 定律 目前市面上出现的大多数与 NodeJS 相关的框架,基本都将 NodeJS 定位在工 ...

随机推荐

  1. 在小程序中引入有赞的vant框架组件

    这里给大家讲解小程序中如何引入vant组件(我这里是采用小程序的云开发模板) 1.首先在项目的miniprogram文件夹右键在终端中打开,输入命令npm init初始化生成一个package.jso ...

  2. Tomcat 调优的技巧

    转载:www.cnblogs.com/wangsen, https://mp.weixin.qq.com/s/WrIsOOyR7o4SwSXMT0Zecg 最近,看到一篇讲述 Tomcat 调优的文章 ...

  3. 【命令】Maven命令

    当前项目的依赖树: mvn dependency:tree -U.-B.-e -U参数: 该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默 ...

  4. 【NOI2019模拟2019.7.1】为了部落 (生成森林计数,动态规划)

    Description: \(1<=n<=1e9,1<=m,k<=100\) 模数不是质数. 题解: 先选m个点,最后答案乘上\(C_{n}^m\). 不妨枚举m个点的度数和D ...

  5. js自动下载

    常用方法是利用a标签的属性download下载对应文件.图片等 <a href=".." download="...."></a> 但是 ...

  6. 牛客多校第九场 J Symmetrical Painting 计算几何/扫描线

    题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积. 题解: 在随着对称轴上移的过程中,必然有一 ...

  7. pycharm 参数、快捷键、调试模式

    PyCharm参数.快捷键.调试模式 PyCharm设置参数 在运行Python脚本时,会经常遇到需要传入额外的参数来运行脚本. 例如下脚本1: #!/usr/bin/env python2 # *. ...

  8. HDU-6441-Find Integer-费马大定理+奇偶数列法则

    感觉这样看的比较清楚. 题意: 给出n和a,判断能否求出a^n+b^n=c^n中b和c的值,若可以输出b和c,否则则输出-1 -1. 思路: 数据给的比较大,但是题目很简单,套两个公式:费马打定理和奇 ...

  9. centos安装完php-fpm、nginx后访问网站出现权限问题

    nginx.conf www.conf 这两个文件上面改用户为www. 如果不知道自己的配置文件位置问题,使用命令查找文件位置: find / -name 'nginx.conf' -print 添加 ...

  10. ES6新的特性有哪些?

    1.新增了块级作用域(let,const) 2.提供了定义类的语法糖(class) 3.新增了一种基本数据类型(Symbol) 4.新增了变量的解构赋值 5.函数参数允许设置默认值,引入了rest参数 ...