一、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. PHP分页初探 一个最简单的PHP分页代码的简单实现

    PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核 ...

  2. aws - shadow 影子使用

    参考链接: https://github.com/aws/aws-iot-device-sdk-java 一.设备注册 二.设备主题

  3. istio入门(03)istio的helloworld-场景说明

    一.原生应用 四个微服务: python微服务:一个deployment(deployment含有一个pod,pod内含有一个容器) java微服务:三个deployment(deployment含有 ...

  4. Linux实战案例(4)CentOS清除用户登录记录和命令历史方法

    CentOS清除用户登录记录和命令历史方法 清除登陆系统成功的记录[root@localhost root]# echo > /var/log/wtmp //此文件默认打开时乱码,可查到ip等信 ...

  5. vmvare入门(1)使用移动,不要使用复制

    1.复制虚拟机会产生新的自动网卡,原来的 System Eth0废了? 2.xftp链接的时候,要选择sftp方式连接,utf8编码.

  6. 为什么Java不能以返回值区分重载方法?

    读者可能会想:"在区分重载方法的时候,为什么只能以类名和方法的形参列表作为标准呢?能否考虑用方法的返回值来区分呢?" 比如下面两个方法,虽然他们有相同的名字和形式参数,但却很容易区 ...

  7. jsp连接书库DatabaseUtil类

    public class DatabaseUtil { private static String driver = ConfigManager.getProperties("driver& ...

  8. Nginx配置特定二级域名

    首先把先在域名设置页面把二级域名解析到服务器的公网IP上,这里假设是 bbs.domainname.com 然后编辑 /etc/nginx/sites-available/domain.com.con ...

  9. 如何从二维数组中的多个key中获取指定key的值?

    精华 LOVEME96 2016-10-21 10:40:19 浏览(1512) 回答(3) 赞(0) 新手求教:二维数组中一般会有多个key,如果我们要获得指定key的值,应该怎么做? 问题标签: ...

  10. JS面向对象之原型链

      对象的原型链 只要是对象就有原型 原型也是对象 只要是对象就有原型, 并且原型也是对象, 因此只要定义了一个对象, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成 ...