.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); border-top-left-radius: 7px; border-top-right-radius: 7px; color: rgba(255, 255, 255, 1); height: 1.8em; line-height: 1.8em; padding: 5px }

1.Java8新特性简介

  java8是Oracle公司在2014年3月18日发布的

  速度更快、代码更少(增加了新的语法Lambda表达式)、强大的Stream API、便于并行、最大化减少空指针异常

2.Java8包含的主要内容:

  1)Lambda表达式

    Lambda表达式允许将函数作为参数进行传递,免去了使用匿名函数

  2)函数式接口

    在一个接口中之定义一个特定功能的方法。

  3)方法引用和构造器引用

    可以直接引用类或对象的方法或构造器。与Lambda联合使用,减少代码的冗余度,使代码更见紧凑简介。

  4)Stream API

    加强了对集合的各种操作,极度的方便开发

  5)接口中默认方法和静态方法

  6)新时间日期API

    加强对日期的处理

  7)其他特性

3.Lambda表达式的使用

  语法:

  新的操作符: 【->】,它将表达式分为两部分。

    左侧:指定Lambda表达式需要的参数;

    右侧:指定Lambda体,即Lambda表达式需要执行的功能。

  1)与平常使用的匿名函数的比较

  案例比较一(无参)

package com.hxc.lambda;

/**
* sun_flower
*/
public class Java8Test { public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.printf(" Hello World!\n --来自普通函数的呼喊");
}
};
runnable.run();
Runnable rn = () -> System.out.println("\n \n Hello World!!! \n --来自Java8新特性的呼唤");  //这里的()即为左侧 空参; -> 后的为右侧,整个要表达的逻辑功能
rn.run();
}
}

  案例比较二(有参)

package com.hxc.lambda;

import java.util.Comparator;
import java.util.TreeSet; /**
* sun_flower
*/
public class Java8Test { public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
});
TreeSet<String> newTreeSet = new TreeSet<>(
(o1, o2) -> { //能够自动推断参数类型,当然也可以写上参数类型
return Integer.compare(o1.length(), o2.length());
});
}
}

  2) Lambda表达式只能引用外部带有final的外层局部变量,这意味着在Lambda体中不能修改该局部变量。

    (如果在外部没有声明为final,且未曾改变该变量,则默认是final类型;如果修改过,则会报错)

  案例:

  //接口部分

package com.hxc.myInterface;

@FunctionalInterface
public interface MathOperation {
int operation(int a, int b);
}
package com.hxc.lambda;

import com.hxc.myInterface.MathOperation;

/**
* sun_flower
*/
public class TestMathOperation { public static void main(String[] args) {
int c = 1; //在Lambda表达式中使用了该变量,则默认为final类型
// c = c + 1; //放开注释,则会报错
MathOperation mo = (a, b) -> a + b + c; //使用局部变量c
MathOperation mo2 = (a, b) -> a - b;
MathOperation mo3 = (a, b) -> {return a * b;}; //使用大括号
MathOperation mo4 = (a, b) -> a / b;
printMathOper(4, 2, mo);
} public static void printMathOper(int a, int b, MathOperation mo) {
System.out.println(mo.operation(a, b));;
}
}

  

Java8新特性(一)之Lambda表达式的更多相关文章

  1. Java8新特性之一:Lambda表达式

    Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...

  2. Java8新特性之forEach+Lambda 表达式遍历Map和List

    这是Java8系列的第二篇,今天来说一下Java8中forEach的简单使用.我们使用对比的方式来看应该会看得更加清楚,更能理解: 一.遍历Map ============Java8之前的方式==== ...

  3. java8新特性1:lambda表达式和函数式接口

    1.lambda的介绍: 1.1.为什么java语言需要引入lambda表达式? java语言诞生于1995年,历史时间已经相对较长了.在其后的各种新型编程语言中,都有着lambda表达式的内容,并且 ...

  4. Java8新特性(1):Lambda表达式

    Lambda表达式可以理解为一种匿名函数:没有名称,但有参数列表.函数主体.返回类型.它是行为参数化的一种实现,行为参数化是指将不同的行为作为参数传递给方法,方法的所具备的能力取决于它接收的行为参数. ...

  5. java8新特性:内存和lambda表达式

    1.内存变化 取消了永久区和方法区,取而代之的是MetaSpace元空间,即直接使用物理内存,即电脑内存8G则直接使用8g内存,而不是分配内存.因为内存改变,所以调整性能对应的调整参数也随之改变. 2 ...

  6. Java8新特性探索之Lambda表达式

    为什么引入Lambda表达式? Lambda 表达式产生函数,而不是类. 在 JVM(Java Virtual Machine,Java 虚拟机)上,一切都是一个类,因此在幕后执行各种操作使 lamb ...

  7. Java8新特性(拉姆达表达式lambda)

    一.函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runn ...

  8. java8 新特性入门 stream/lambda

    Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (b ...

  9. 乐字节-Java8核心特性实战之Lambda表达式

    大家好,小乐又来给大家分享Java8核心特性了,上一篇文章是<乐字节|Java8核心实战-接口默认方法>,这次就来讲Java8核心特征之Lambda表达式. Java8 引入Lambda表 ...

  10. C++11中新特性之:lambda 表达式

    首先摆出Lambda表达式语法 lambda-expression: lambda-introducer lambda-declaratoropt compound-statementlambda-i ...

随机推荐

  1. 面试系列——Mysql索引

    1.索引分类 Hash索引Hash 索引查询效率很高,时间复杂度O(1).Mysql Innodb引擎不支持hash索引的.Hash索引适合精确查找,不适合范围查找. 平衡二叉树时间复杂度为 O(n) ...

  2. React中使用react-file-viewer,实现预览office文件(pdf,word,xlsx等文件)前端实现

    最近做一个项目要求在前端浏览器可以直接打开office文件(pdf,doc,xlsx等文件).pdf浏览器可以直接打开(可以直接用a标签href="文件地址"或者iframe标签s ...

  3. 面试题二:JVM

    JVM垃圾回收的时候如何确定垃圾? 有2种方式: 引用计数 每个对象都有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收: 缺点:无法解决对象循环引用的问题: 可达性分 ...

  4. 想用Electron做个小工具?这个或许是终极版

    故事背景 之前在网上有看到很多小伙伴基于 electron 实现了非常多好用的桌面端工具,比如图床管理工具 PicGo,就专门做图床工具.也有一些其他的类似的小工具,比如 saladict-deskt ...

  5. Hibernate框架(二)POJO对象的操作

    POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作. 一,Hibernate框架中主键的生成策略有三种方式: 1,数据 ...

  6. Robotframework学习笔记之一Common Resource导入的Library库显示红色(导入失败)

    第一次使用Robotframework,所以也遇到了很多的坑,导入项目后 ,一些自带的库显示红色,导入失败!(ps:自带的库也显示红色) Ride日志如下(Tools--view ride log): ...

  7. C语言:预处理 自定义头文件

    DEV-C++包含文件搜索路径C:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\includeC:\Program Files\Dev-Cpp\M ...

  8. 给potplayer配置iptv源,看所有你想看的电视

    目录 一.展示: 二.下载 三.播放 一.展示: 二.下载 Github 上的开源项目:iptv-org/iptv 传送门: https://github.com/iptv-org/iptv 该项目包 ...

  9. 用 SwiftUI 五天组装一个微信

    GitHub 链接:SwiftUI-WeChatDemo 效果图 实装内容 4 个 Tab 页面 + 聊天界面,使用纯 SwiftUI 搭建而成 应用启动界面 Launch Screen 国际化及应用 ...

  10. Ajax爬取动态数据和HTTPS自动默认证书

    Ajax数据爬取 在spider爬取数据的过程中,有些网页的数据是利用Ajax动态加载出来的,所以,在网页源代码中可能不会看到这一部分的数据,因此,我们需要使用另外的方式进行数据多爬取. 以豆瓣电影的 ...