一、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之路--day15--常用模块之logging模块

    常用模块 1 logging模块 日志级别:Noset (不设置) Debug---(调试信息)----也可用10表示 Info--(消息信息)----也可用20表示 Warning---(警告信息) ...

  2. python之路--day13---函数--三元表达式,递归,匿名函数,内置函数-----练习

    1.文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female ...

  3. Python之旅.第三章.函数3.26

    一.函数: 1.为什么要有函数?什么是函数? 1.组织结构不清晰,可读性差 2.代码冗余 3.管理维护的难度极大,扩展性 具备某一个功能的工具就是程序的中函数 事先准备工具的过程---->函数的 ...

  4. babel基本用法

    babel-cli babel-cli是本地使用编译js文件 1.安装: cnpm i babel-cli babel-preset-env -D 2.配置packjson: "script ...

  5. oracle drop table(表)数据恢复方法

    今天不小心把系统用户表给drop掉了,正在运行的系统正式库啊,还好可以恢复 一.查看数据库回收站,看删除的表是否还在回收站select object_name,original_name,partit ...

  6. css3中的动画 @keyframes animation

    动画的运用比较重要.接下来我希望针对我自己学习遇到的问题,再总结一下这个属性的使用方法. 创建一个动画: @keyframes 动画名 {样式} 引用自己创建的动画: animation:动画名  时 ...

  7. Pymsql

    Pymsql 1.创建数据库连接 pymsql connect conn=pymysql.connect(host="localhost",user="root" ...

  8. format的应用

    >>> "{a} love {b}.{c}".format(a="I", b="Fish", c="com&qu ...

  9. 确保 PHP 应用程序的安全 -- 不能违反的四条安全规则

    规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...

  10. Mybatis-简单基于源码了解获取动态代理对象

    这是我们要测试的代码 OderDao就是我们要需要获取的对象. 首先我们根据传入的参数,进入SqlSessionFactoryBuilder 中的对应的build 方法,第一步创键XMLConfigB ...