Java8的重要新特性
一、Lambda表达式
java8中Lambda表达式的书写方式:
(参数) -> 表达式
(参数) -> 单行语句
(参数) -> { 语句 }
1.Lambda遍历List和Map
package com.yanwu.www.demo; /**
* @author Harvey
*/ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Demo1 {
public static void main(String[] args) {
List list=new ArrayList<>();
Map<String,Object> map=new HashMap();
list.add("aa");
list.add("bb");
list.add("cc");
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
//原始遍历List方法
for(String str:list){
System.out.println(str);
}
System.out.println("======Lambda操作list的for each循环==========");
list.forEach(obj->{
obj=obj.toUpperCase();
System.out.println(obj);
});
System.out.println("********对Map进行操作*********");
//原始遍历Map方法
for(Map.Entry<String, Object> entry:map.entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
System.out.println("======Lambda操作map的循环==========");
map.forEach((K,V)->{
System.out.println(K+":"+V);
}); } }
二、接口的默认方法
Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。
package com.yanwu.www.demo; /**
* @ClassName: Demo2
* @Description: TODO(这里用一句话描述这个类的作用)
* @author Harvey
* @date 2017年7月31日 下午10:01:57
*
*/
interface Demo{
void test1();
//default关键字,接口的默认方法
default void test2(){
System.out.println("this is test2()");
}
} public class Demo2 {
public static void main(String[] args) {
Demo d=new Demo(){
@Override
public void test1() {
// TODO Auto-generated method stub
System.out.println("this is test1()");
} };
d.test1();//实例化的时候已经实现
d.test2();//直接可以调用
}
}
三、方法和构造函数的引用
Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用。一共定义了四种形式:
- 引用静态方法:类名称 :: static 方法名称;
- 引用某个对象的方法:实例化对象 :: 普通方法
- 引用特定类型的方法:特定类 :: 普通方法
- 引用构造方法: 类名称::new
引用静态方法:类名称 :: static 方法名称
package com.yanwu.www.demo; import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier; /**
* @ClassName: Person
* @Description: TODO(这里用一句话描述这个类的作用)
* @author Harvey
* @date 2017年7月31日 下午10:17:26
*
*/
@FunctionalInterface //只能定义一个方法
interface Demo3<P,R>{
R test3(P p);
} public class Person {
private int age;
private String name;
private String sex;
public Person(){}
public void test1(){
System.out.println("this is normal method test1()");
}
public static void test2(){
System.out.println("this is static method test2()");
}
public static void main(String[] args) {
Person p=new Person();
p.test1();
Person.test2();
Demo3<Integer,String> d0=String::valueOf;//对静态方法的引用
System.out.println(d0.test3(1)); } }
(其他例子暂略)
四、函数式接口包以及提供的四个核心函数式接口
包:java.util.function
四个核心接口:
1.功能性接口: public interface Function<T, R> {R apply(T t);} //接收一个参数,返回一个处理结果
2.消费型接口:public interface Consumer<T> {void accept(T t);} //负责接收数据,并且不返回处理结果
3.供给型接口:public interface Supplier<T> { T get();} //不接收参数,可以返回结果
4.断言性接口 : public interface Predicate<T> {boolean test(T t);} //进行判断操作
package com.www.yanwu.Annotation; import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier; /**
* @ClassName: Demo4
* @Description: TODO(这里用一句话描述这个类的作用)
* @author Harvey
* @date 2017年7月31日 下午11:25:38
*
*/
public class Demo4 {
public static void main(String[] args) {
String str="##hello";
//测试功能性接口,有参数,有返回值
Function<String,Boolean> fun=str::startsWith;
System.out.println(fun.apply("#"));
//测试消费型接口,有参数,无返回值
Consumer c=System.out::println;
c.accept("hello world");
//测试供给型接口,没有参数,有返回值的
Supplier s=str::toUpperCase;
System.out.println(s.get());
//测试断言型接口,有参数,返回布尔型
Predicate p=str::equalsIgnoreCase;
System.out.println(p.test("##hello")); } }
Java8的重要新特性的更多相关文章
- Java基础学习总结(33)——Java8 十大新特性详解
Java8 十大新特性详解 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API ...
- Java8 的一些新特性总结
目前Java8已经发布很多个版本了,对于Java8中的新特性虽然有各位大神进行jdk8的英文特性文档翻译,但都太官方化语言,对照几篇翻译本人对新特性文档做一下总结,以帮助我和各位不了解Java8新特性 ...
- 【Java8新特性】一张图带你领略Java8有哪些新特性
写在前面 很多小伙伴留言说,冰河你能不能写一些关于Java8的文章呢,看书看不下去,看视频进度太慢.好吧,看到不少读者对Java8还是比较陌生的,那我就写一些关于Java8的文章吧,希望对大家有所帮助 ...
- 常见面试题:java8有什么新特性?
常见面试题:java8有什么新特性? 主要有以下这些新特性: lambda 表达式,经常配合函数式接口使用,可以有效减少代码量 Runnable 是一个函数式接口,下面展示了创建线程三种写法,显然最后 ...
- JAVA8 十大新特性详解
前言: Java8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java ...
- Java8 十大新特性详解(转)
本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口 ...
- Java语言:JAVA8 十大新特性详解(zz)
关键词: Lambda表达式.函数式接口.方法与构造函数引用.接口的默认方法 原文地址: http://www.jb51.net/article/48304.htm 本教程将Java8的新特新逐一列出 ...
- Java8 的一些新特性的学习理解
近期在学习队列相关的一些知识,在学习过程中发现Iterable<T>接口中新增了两个新的方法,出于好奇,就想知道这是什么东东,干什么用的.俗话说:实践出真知,所以就有了以下反复的测试. 先 ...
- java8 十大新特性
这篇文章是对Java 8中即将到来的改进做一个面向开发者的综合性的总结,JDK的这一特性将会在2013年9月份发布. 在写这篇文章的时候,Java 8的开发工作仍然在紧张有序的进行中,语言特新和API ...
- java8的接口新特性(可以有方法体的接口)(转)
以前Java的接口中定义的方法不可以有方法体,这样试用起来,有时候听不方便的,当有多个类实现了想同的接口,接口中某一些方法的实现体可能都是一样的时候,这样无疑浪费了很多时间,在写重复的代码(或者说co ...
随机推荐
- Python内置函数(52)——getattr
英文文档: getattr(object, name[, default]) Return the value of the named attribute of object. name must ...
- Spring Cloud的DataRest(二)
一.创建工程 1.主程序 2.依赖 3.配置 二.案例开发 1.entity 2.repository 三.案例验证 安装postman4.13,启动应用,执行如下案例验证! 1.create - p ...
- LINGO 基础学习笔记
LINGO 中建立的优化模型可以由5个部分组成,或称为 5 段(section): (1)集合段(SETS):这部分要以"SETS:"开始,以"ENDSETS" ...
- 整理一下 System.Linq.Enumerable 类中的那些比较少用的方法
Linq 虽然用得多,但是里面有一些方法比较少用,因此整理一下.Enumerable 类的所有方法可以在 MSDN 上查阅到:https://msdn.microsoft.com/zh-cn/libr ...
- RxJava系列番外篇:一个RxJava解决复杂业务逻辑的案例
之前写过一系列RxJava的文章,也承诺过会尽快有RxJava2的介绍.无奈实际项目中还未真正的使用RxJava2,不敢妄动笔墨.所以这次还是给大家分享一个使用RxJava1解决问题的案例,希望对大家 ...
- HDU1028【母函数】
题目:给你数n,问n可以有哪些组成方案(这些n的数字个数不超过n),母函数模板题 #include <cstdio> #include <cstring> #include & ...
- python继承——封装
python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...
- POJ-2586 Y2K Accounting Bug贪心,区间盈利
题目链接: https://vjudge.net/problem/POJ-2586 题目大意: MS公司(我猜是微软)遇到了千年虫的问题,导致数据大量数据丢失.比如财务报表.现在知道这个奇特的公司每个 ...
- SQL server2017的操作(练习题)
题目: 假设有教材管理数据库BM,包括3个基本表: 教材(书号,书名,作者,出版社) B(Bno, Bname, Author, pub) 班级(班号,专业,所在系,人数) C(Cno, Spe, D ...
- html如何实现的
超文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的 ...