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 ...
随机推荐
- 优化从 App.config 读取配置文件
public class AppSettingsConfig { /// <summary> ////// </summary> public static int Query ...
- 阿里云API网关(8)开发指南-SDK下载
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- OAuth2.0学习(1-7)授权方式4-客户端模式(Client Credentials Grant)
授权方式4-客户端模式(Client Credentials Grant) 客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提 ...
- Codeforces 343D WaterTree - 线段树, DFS序
Description Translated by @Nishikino_Maki from Luogu 行吧是我翻的 Mad scientist Mike has constructed a roo ...
- Eclipse中JavaSwing图形插件安装
1.在百度中搜索WindowBuilder,找到http://www.eclipse.org/windowbuilder/ 2.点击Download调转到页面: 因为我的eclipse版本是 3.点击 ...
- 广度优先(bfs)和深度优先搜索(dfs)的应用实例
广度优先搜索应用举例:计算网络跳数 图结构在解决许多网络相关的问题时直到了重要的作用. 比如,用来确定在互联网中从一个结点到另一个结点(一个网络到其他网络的网关)的最佳路径.一种建模方法是采用无向图, ...
- www的构建技术
www的构建技术分别是: html超文本标记语言,页面的文本显示 http超文本传输协议,信息传输转移的约定 url统一资源定位符,客户端浏览超文本的地址集合
- 创建第一个Django项目
第一个Django项目 命令行下使用如下命令创建一个名为"mysite"的Django项目: django-admin startproject mysite 这将会在当前位置创建 ...
- 使Asp.net Core同时支持输出Json/Xml
我们知道Asp.net Core是支持输出为Json格式的.同时也支持输出为xml格式.只要我们正确的配置.并在Request时指定正确的Accept,即可根据不同的Header来输出不同的格式. 前 ...
- 【微信小程序】对微信http请求API的封装,方便对错误码进行处理
/** * App 微信配置文件app.js * author: nujey * versions: 1.0.0 */ App({ /** * @param {Object ...