最近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. vue+element 构建的后台管理系统项目(1)新建项目

    1.运行 vue init webpack demo   这里的demo是你项目的名字 2.npm run dev 查看项目启动效果 3.安装Element cd 项目 cmd  运行 npm i e ...

  2. 关于synchronized和Lock

    原文链接:关于volatile关键字解析,synchronized和Lock参考 深入浅出,解释的非常清楚,有条理~~~ 以下为转载内容: Java并发编程:volatile关键字解析 volatil ...

  3. ReadWriteLock 如何使用?

    QReadWriteLock从名字看就知道是读写锁的意思.和QMutex一样,QReadWriteLock也是线程同步的一种工具.那么它有什么用呢?和QMutex又有什么区别呢?写个例子瞧一瞧. 特点 ...

  4. leetcood学习笔记-104-二叉树的最大深度

    题目描述: 第一次提交: class Solution(object): def maxDepth(self, root): """ :type root: TreeNo ...

  5. BeautifulSoup 爬虫

    一 安装BeautifulSoup 安装Python的包管理器pip 然后运行 $pip3 install beautifulsoup 在终端里导入它测试下是否安装成功 >>>fro ...

  6. JUC 一 ReentrantReadWriteLock

    java.util.concurrent.locks ReentrantLock是独占锁,一种相对比较保守的锁策略,在这种情况下任何"读/读"."读/写".&q ...

  7. hdu6606多校第四次04——线段树加速dp

    /* 首先想到二分答案,难点在于如何判断是否有K段,每段和<=mid 把问题转化成求最多有R段,最少有L段,每段的的和<=mid,如果 L<=K<=R 那么显然存在把这个序列分 ...

  8. NXOpenC#_Training_1(cn)【转载】

  9. Go语言中new()和 make()的区别详解

    概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似.不过解释两者之间的不同也非常容易. new 的主要特性 首先 new 是内建函数,你可以从 http://gol ...

  10. KEIL, MDK 关于C99结构体变量初始化

    C99:here 例如声明了这样的结构体 void test1() { tt_t t1 ={ .a = , .d = 'd', .b = , .c = }; static tt_t t2 = { ,, ...