1. 需求1:从user集合中 找出age=15的用户  传统方法 就不说了 举例明一下 java1.8 使用Predicate接口解决该需求:

    @FunctionalInterface
    public interface Predicate<T> { /**
    * Evaluates this predicate on the given argument.
    *
    * @param t the input argument
    * @return {@code true} if the input argument matches the predicate,
    * otherwise {@code false}
    */
    boolean test(T t);
    }
    public static List<User> testPredicate(List<User> users, Predicate<User> predicate) {
    List<User> tempUsers = new ArrayList<>();
    for (User user : users) {
    boolean test = predicate.test(user);
    System.out.println(test);
    if (test) {
    tempUsers.add(user);
    }
    }
    return tempUsers;
    }
    public static void main(String[] args) {
    List<User> testPredicate = Test.testPredicate(Test.users, (user) ->
    user.getAge() == 15);
    }

    Predicate接口中有一个test 接口方法,该方法 可以传入T 对象 并且返回一个boolean类型  Predicate.test(user)  表示 只有满足 传参进去的user 的age=15  才会返回true 则 将该user 添加到tempUsers中

  2. 需求2:将所有的user对象的age都初始化为0 传统的可以循环每个user  将该user的age设置为0  java1.8 则可以使用 Consumer 接口实现:
    @FunctionalInterface
    public interface Consumer<T> { /**
    * Performs this operation on the given argument.
    *
    * @param t the input argument
    */
    void accept(T t);
    }
    public static List<User> testConsumer(List<User> users, Consumer<User> consumer) {
    List<User> tempUsers = new ArrayList<>();
    for (User user : users) {
    consumer.accept(user);
    tempUsers.add(user);
    }
    return tempUsers;
    }
    public static void main(String[] args) {
    
            List<User> testConsumer = Test.testConsumer(Test.users, (user) -> user.setAge(100));
    }
    Consumer 有个accept的接口方法,无返回值,可以用作更改对象  consumer.accept(user) 都将执行 user.setAge(100)

3 需求3:返回一个user的姓名 一般都是直接user.getName java1.8 则 用function接口 可以实现,相对这个需求来说 不用funcation 更快,这里就只是为了使用 而使用:

@FunctionalInterface
public interface Function<T, R> { /**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);
public static String testFunction(User users, Function<User, String> function) {
return function.apply(users);
}
    public static void main(String[] args) {
User user = new User("funcation", 25);
String testFunction = Test.testFunction(user, (u) -> {
return u.getName();
});
System.out.println(testFunction);
}
Function<T, R> 该接口泛型 T 你需要修改 或者 操作的对象  R 是你返回的对象  接口方法
 R apply(T t); 传入参数T 对象  返回  R 对象 例子:传入的是user对象 返回的是String 对象 

4.需求4:尴尬的需求,就是返回一个User对象 java1.8 Supplier

@FunctionalInterface
public interface Supplier<T> { /**
* Gets a result.
*
* @return a result
*/
T get();
}
public static User testSuppler(Supplier<User> supplier) {

        return supplier.get();

    }
public static void main(String[] args) {
User testSuppler = Test.testSuppler(() -> new User("Tom", 15));
System.out.println(testSuppler);
}

Supplier<T> 返回一个泛型对象。有点类似 工厂方法
5 上面就是 java1.8 常用的几个接口 简单的举了几个例子,主要是要能举一反三  学活了。比如泛型T  可以使基本类型 对象类型

java 1.8新特性(二) 关于 function 接口的使用的更多相关文章

  1. Java JDK1.8新特性之四大函数式接口

    JDK 1.8的一些新特性 四大核心函数式接口(Consumer.Predicate.Supplier.Function),结合lambda表达式 import java.util.ArrayList ...

  2. JAVA 8 主要新特性 ----------------(二)JDK1.8优点概括

    一.JDK1.8优点概括 1.速度更快 由于底层结构和JVM的改变,使得JDK1.8的速度提高. 2.代码更少(增加了新的语法 Lambda 表达式)          增加新特性Lambda表达式的 ...

  3. 深入理解java虚拟机---jdk8新特性(二)

    1.jdk8新特性 1.新特性 2.lambda函数表达式的作用 A: 替换内部类 B:对集合的操作并行化

  4. JAVA 8 主要新特性 ----------------(二)版本中数据结构的修改浅析

    一.版本中数据结构的修改浅析1.HashMap.HashSet.ConcurrentHashMap的数据结构发生变化 (1)HashMap简介(结构:哈希表+链表) HashMap存储的数据是无序的, ...

  5. JAVA 8 主要新特性 ----------------(四)Lambda函数式接口

    一.什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口.  你可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法 ...

  6. [转] Java 8的新特性

    简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...

  7. Java 8 新特性1-函数式接口

    Java 8 新特性1-函数式接口 (原) Lambda表达式基本结构: (param1,param2,param3) -> {代码块} 例1: package com.demo.jdk8; i ...

  8. Java 8的新特性—终极版

    作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...

  9. Java 8 新特性:1-函数式接口

    (原) Java 8 新特性1-函数式接口 Lambda表达式基本结构: (param1,param2,param3) -> {代码块} Lambda表达式结构: (type1 arg1,typ ...

  10. Java 9和Java 10的新特性

    http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...

随机推荐

  1. PS不显示图片

    最近安装Adobe AIR的时候因为安装不了,删除了相关的配置文件,安装了Adobe AIR之后,用PS打开图片的时候发现不显示图片了,如图: 最后通过万能的百度了解到了是笔记本都采用了双显卡(i3. ...

  2. ionic1实现热更新以版本检测更新安装包的方法

    1.需要下载热更新插件:插件名称是cordova-hot-code-push 首先打开cli,执行命令 npm install -g cordova-hot-code-push-cli 此功能主要是为 ...

  3. 【HAOI2012】外星人

    又犯sb错了QAQ 原题: 艾莉欧在她的被子上发现了一个数字 ,她觉得只要找出最小的x使得,.根据这个 她就能找到曾经绑架她的外星人的线索了.当然,她是不会去算,请你帮助她算出最小的x. test&l ...

  4. golang sublime text3 自动补全

    按下快捷键 command+ shift +p 调出控制台 输入install  然后输入Golang Tools Integration 安装Golang Tools Integration 插件即 ...

  5. Go语言实战 (William,Kennedy 等著)

    第1章 关于Go语言的介绍 (已看) 1.1 用Go解决现代编程难题 1.1.1 开发速度 1.1.2 并发 1. goroutine 2. 通道 1.1.3 Go语言的类型系统 1. 类型简单 2. ...

  6. C#_从DataTable中检索信息

    C#_从DataTable中检索信息 存在于内存中的虚拟表DataTable,绑定在数据显示控件后,如果想在再检索其中某些信息,可以利用DataTable.Select方法进行检索,避免了重复的读取数 ...

  7. http1.1 和 http2 的协议对比测试

    http1.1 和 http2 的协议对比测试 http 协议发展了很多年,目前最为流行的是 http 2. 发现有些网站很流行的网站用的 http1.1, 询问后原来是因为有特殊用途. https: ...

  8. python之路---09 初始函数 参数

    二十七.初始函数 1.函数: 对代码块和功能的封装和定义 2.格式及语法 def  函数名()           #  定义 函数体 函数名()              #  调用 3.    r ...

  9. [转]HTML 简介

    HTML 实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  10. AIX系统日志

    1.系统错误日志 存放路径:/var/adm/ras/errlog 说明:该日志记录了系统所检测到的软硬件故障和错误,尤其对系统的硬件故障有很大的参考价值,是AIX提供的最有价值的日志之一, errl ...