Java lambda尝鲜
最近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尝鲜的更多相关文章
- Java 9 尝鲜之JShell交互式编程环境
JShell--Java 9 的交互式编程环境 本文要求读者有基本的 Java 知识. Tips Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容.也就是说,用 Java 9 写的代 ...
- Java 8特性尝鲜:新新IO
Java 8特性尝鲜:新新IO 在这个专题前面的文章中,我们已经看到,使用Java8的lambda表达式对现有的JDK1.2 I/O库的提升,主要是可以使用lambda表达式来构造java.io.Fi ...
- Java协程编程之Loom项目尝鲜
前提 之前很长一段时间关注JDK协程库的开发进度,但是前一段时间比较忙很少去查看OpenJDK官网的内容.Java协程项目Loom(因为项目还在开发阶段,OpenJDK给出的官网https://ope ...
- JEP解读与尝鲜系列4 - Java 16 中对于 Project Valhalla 的铺垫
这是 JEP 解读与尝鲜系列的第 4 篇,之前的文章如下: JEP解读与尝鲜系列 1 - Java Valhalla与Java Inline class JEP解读与尝鲜系列 2 - JEP 142 ...
- 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅
本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动. 1.引言 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发( ...
- C++17尝鲜
https://cloud.tencent.com/developer/article/1351910 [译]C++17,optional, any, 和 variant 的更多细节 用户261520 ...
- Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spr ...
- Leetcode多线程题库练习(新功能尝鲜)& 个人感悟
大家好, 我是方子龙.很久没有自己写文章了. 一面是因为工作上的需求开发任务比较重,下班回家基本上就躺床玩几把王者,度过闲暇时光. 二面是一有点时间就自己主动地去看书和学习,知道自己还缺少很多知识,由 ...
- CabloyJS 4.12震撼发布,及新版教程尝鲜
引言 凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写 | Atwood 定律 目前市面上出现的大多数与 NodeJS 相关的框架,基本都将 NodeJS 定位在工 ...
随机推荐
- vue+element 构建的后台管理系统项目(1)新建项目
1.运行 vue init webpack demo 这里的demo是你项目的名字 2.npm run dev 查看项目启动效果 3.安装Element cd 项目 cmd 运行 npm i e ...
- 关于synchronized和Lock
原文链接:关于volatile关键字解析,synchronized和Lock参考 深入浅出,解释的非常清楚,有条理~~~ 以下为转载内容: Java并发编程:volatile关键字解析 volatil ...
- ReadWriteLock 如何使用?
QReadWriteLock从名字看就知道是读写锁的意思.和QMutex一样,QReadWriteLock也是线程同步的一种工具.那么它有什么用呢?和QMutex又有什么区别呢?写个例子瞧一瞧. 特点 ...
- leetcood学习笔记-104-二叉树的最大深度
题目描述: 第一次提交: class Solution(object): def maxDepth(self, root): """ :type root: TreeNo ...
- BeautifulSoup 爬虫
一 安装BeautifulSoup 安装Python的包管理器pip 然后运行 $pip3 install beautifulsoup 在终端里导入它测试下是否安装成功 >>>fro ...
- JUC 一 ReentrantReadWriteLock
java.util.concurrent.locks ReentrantLock是独占锁,一种相对比较保守的锁策略,在这种情况下任何"读/读"."读/写".&q ...
- hdu6606多校第四次04——线段树加速dp
/* 首先想到二分答案,难点在于如何判断是否有K段,每段和<=mid 把问题转化成求最多有R段,最少有L段,每段的的和<=mid,如果 L<=K<=R 那么显然存在把这个序列分 ...
- NXOpenC#_Training_1(cn)【转载】
- Go语言中new()和 make()的区别详解
概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似.不过解释两者之间的不同也非常容易. new 的主要特性 首先 new 是内建函数,你可以从 http://gol ...
- KEIL, MDK 关于C99结构体变量初始化
C99:here 例如声明了这样的结构体 void test1() { tt_t t1 ={ .a = , .d = 'd', .b = , .c = }; static tt_t t2 = { ,, ...