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. scripy

    性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. import requests def fetch_async(url): ...

  2. MySQL数据库一

    MySQL的基本命令: 进入数据库: mysql -u [username] -p[password]   (注:-u 和 用户名之间可以有空格 -p和password之间无空格)  mysql -u ...

  3. draw graph

    http://www.icl.pku.edu.cn/member/yujs/bsdfiles/html/mpost.htmlUNIX下绘图面面观 http://www.tug.org/metapost ...

  4. golang json html escape unicode

    https://play.golang.org/p/FAH-XS-QMC https://github.com/gin-gonic/gin/issues/693 package main import ...

  5. Singer 学习三 使用Singer进行mongodb 2 postgres 数据转换

    Singer 可以方便的进行数据的etl 处理,我们可以处理的数据可以是api 接口,也可以是数据库数据,或者 是文件 备注: 测试使用docker-compose 运行&&提供数据库 ...

  6. #pragma Directive in C/C++

    The #pragma is complier specified. for example, the code below does not work in gcc. #pragma startup ...

  7. oracle-网络

    e10835 net reference /u01/app/oracle/diag/tnslsnr/oracle1/listener/trace/listener.log TIMESTAMP * CO ...

  8. python datetime学习

    Python中处理时间的模块datetime, 这个模块里包含的类也叫datetime,所以要使用需要先import from datetime import datetime 获取当前日期和时间 d ...

  9. 第1节 常用DOS(磁盘操作系统)命令

    一.打开DOS命令窗口 1)快捷键:win + r,打开命令提示符窗口: 2)左击“开始”菜单,在运行里输入cmd,按回车打开命令提示符窗口: 二.常见命令 1)文件夹操作: d:+ 回车:盘符切换 ...

  10. mysql之 表空间传输

    说明:MySQL(5.6.6及以上),innodb_file_per_table开启. 1.1. 操作步骤: 0. 目标服务器创建相同表结构1. 目的服务器: ALTER TABLE t DISCAR ...