java 1.8新特性(二) 关于 function 接口的使用
- 需求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:将所有的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 接口的使用的更多相关文章
- Java JDK1.8新特性之四大函数式接口
JDK 1.8的一些新特性 四大核心函数式接口(Consumer.Predicate.Supplier.Function),结合lambda表达式 import java.util.ArrayList ...
- JAVA 8 主要新特性 ----------------(二)JDK1.8优点概括
一.JDK1.8优点概括 1.速度更快 由于底层结构和JVM的改变,使得JDK1.8的速度提高. 2.代码更少(增加了新的语法 Lambda 表达式) 增加新特性Lambda表达式的 ...
- 深入理解java虚拟机---jdk8新特性(二)
1.jdk8新特性 1.新特性 2.lambda函数表达式的作用 A: 替换内部类 B:对集合的操作并行化
- JAVA 8 主要新特性 ----------------(二)版本中数据结构的修改浅析
一.版本中数据结构的修改浅析1.HashMap.HashSet.ConcurrentHashMap的数据结构发生变化 (1)HashMap简介(结构:哈希表+链表) HashMap存储的数据是无序的, ...
- JAVA 8 主要新特性 ----------------(四)Lambda函数式接口
一.什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口. 你可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法 ...
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
- Java 8 新特性1-函数式接口
Java 8 新特性1-函数式接口 (原) Lambda表达式基本结构: (param1,param2,param3) -> {代码块} 例1: package com.demo.jdk8; i ...
- Java 8的新特性—终极版
作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...
- Java 8 新特性:1-函数式接口
(原) Java 8 新特性1-函数式接口 Lambda表达式基本结构: (param1,param2,param3) -> {代码块} Lambda表达式结构: (type1 arg1,typ ...
- Java 9和Java 10的新特性
http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...
随机推荐
- PWA需要的技术
1 Manifest https://developer.mozilla.org/zh-CN/docs/Web/Manifest 2 Service Work ...
- ACM 删数问题 SDUT 2072
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2072.html 删数问题 Time Limit ...
- 可变,不可变类型和hash
可变与不可变类型 截止到目前为止我们已经学过很多数据类型:数字类型.字符串类型.列表类型.元祖类型. 在python中,我们对数据类型还有另外一种分类方式,我们给数据类型分为可变数据类型和不可变数据类 ...
- 《DSP using MATLAB》Problem 6.6
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- 直面Java 第003期
. 问:什么是平台无关性,Java是如何做到平台无关的? 解: 大家说的都很对,看来大家对这个概念掌握的很可以.我简单总结一下. 跨平台指的是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行 ...
- vm如何安装xenserver
xenserver下载链接 http://downloadns.citrix.com.edgesuite.net/12636/XenServer-7.2.0-install-cd.iso 安装过程和安 ...
- Singer 学习十 同步模式
sync 模式是属于tap 的操作,同步模式下,tap 需要提交 schema. record .state message, singer 指南对于每种 类型有详细的说明 streams 每个str ...
- laya的那些坑
游戏运行在chrome里面 听不见声音 游戏运行在chrome里面 听不见声音:其它浏览器可以听见声音开发者模式提示如下: The AudioContext was not allowed to s ...
- 拷贝某个区间(copy,copy_back)
copy 为outputIterator中的元素赋值而不是产生新的元素,所以outputIterator不能是空的 如要元素安插序列,使用insert成员函数或使用copy搭配insert_itera ...
- java考试感受
开学不久,我们进行了一次java程序考试.在此之前,老师要求我们在假期自学java并提前发了一个考试样卷,要求用数组编写一个学生信息管理系统并能够实现一系列的功能.由于我早早的便完成了这道题.因此对这 ...