一、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的重要新特性的更多相关文章

  1. Java基础学习总结(33)——Java8 十大新特性详解

    Java8 十大新特性详解 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API ...

  2. Java8 的一些新特性总结

    目前Java8已经发布很多个版本了,对于Java8中的新特性虽然有各位大神进行jdk8的英文特性文档翻译,但都太官方化语言,对照几篇翻译本人对新特性文档做一下总结,以帮助我和各位不了解Java8新特性 ...

  3. 【Java8新特性】一张图带你领略Java8有哪些新特性

    写在前面 很多小伙伴留言说,冰河你能不能写一些关于Java8的文章呢,看书看不下去,看视频进度太慢.好吧,看到不少读者对Java8还是比较陌生的,那我就写一些关于Java8的文章吧,希望对大家有所帮助 ...

  4. 常见面试题:java8有什么新特性?

    常见面试题:java8有什么新特性? 主要有以下这些新特性: lambda 表达式,经常配合函数式接口使用,可以有效减少代码量 Runnable 是一个函数式接口,下面展示了创建线程三种写法,显然最后 ...

  5. JAVA8 十大新特性详解

    前言: Java8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java ...

  6. Java8 十大新特性详解(转)

    本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口 ...

  7. Java语言:JAVA8 十大新特性详解(zz)

    关键词: Lambda表达式.函数式接口.方法与构造函数引用.接口的默认方法 原文地址: http://www.jb51.net/article/48304.htm 本教程将Java8的新特新逐一列出 ...

  8. Java8 的一些新特性的学习理解

    近期在学习队列相关的一些知识,在学习过程中发现Iterable<T>接口中新增了两个新的方法,出于好奇,就想知道这是什么东东,干什么用的.俗话说:实践出真知,所以就有了以下反复的测试. 先 ...

  9. java8 十大新特性

    这篇文章是对Java 8中即将到来的改进做一个面向开发者的综合性的总结,JDK的这一特性将会在2013年9月份发布. 在写这篇文章的时候,Java 8的开发工作仍然在紧张有序的进行中,语言特新和API ...

  10. java8的接口新特性(可以有方法体的接口)(转)

    以前Java的接口中定义的方法不可以有方法体,这样试用起来,有时候听不方便的,当有多个类实现了想同的接口,接口中某一些方法的实现体可能都是一样的时候,这样无疑浪费了很多时间,在写重复的代码(或者说co ...

随机推荐

  1. 【转】Python处理wave文件

    #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活 ...

  2. 智能合约语言 Solidity 教程系列9 - 错误处理

    这是Solidity教程系列文章第9篇介绍Solidity 错误处理. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文 ...

  3. (转载) ASP.NET(C#) Web Api 通过文件流下载文件到本地实例

    下载文件到本地是很多项目开发中需要实现的一个很简单的功能.说简单,是从具体的代码实现上来说的,.NET的文件下载方式有很多种,本示例给大家介绍的是ASP.NET Web Api方式返回HttpResp ...

  4. BizTalk Server 2010高可用方案

    BizTalk Server 2010高可用方案 本文介绍了 Microsoft BizTalk Server 中通过对主机的各层进行扩展提供高可用性的方案. 分隔各个区域的功能分为不同的主机和中的层 ...

  5. Python内置函数(48)——__import__

    英文文档: __import__(name, globals=None, locals=None, fromlist=(), level=0) This function is invoked by ...

  6. kubernetes入门(09)kubernetes1.7集群安装(2017/11/13)

    CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇) https://www.cnblogs.com/liangDream/p/7358847.html 一. ...

  7. SpringCloud的服务注册中心(三) - 进一步了解 Eureka

    一.服务治理参与者 服务注册中心: eureka-server 服务提供者:HELLO-SERVICE 服务消费者 :HELLO-CONSUMER 很多时候,客户端既是服务提供者又是服务消费者,-&g ...

  8. GIT入门笔记(7)- 修改文件并向版本库提交

    1.修改文件vi readme.txt git status 发现被修改的文件列表git diff readme.txt 2.git add readme.txt git status  --注意gi ...

  9. BBS的登陆——发帖——回帖

    整体分析思路 1.首先手工熟悉一遍业务流程 2.录制脚本,选取协议,设置录制选项 1)Run-Time-Settings——Preferences——Options设置3个超时 2)Recording ...

  10. Java集合总结【面试题+脑图】,将知识点一网打尽!

    前言 声明,本文用的是jdk1.8 花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~ 回顾目录: Collection总览 List集 ...