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的发 ...
随机推荐
- mysql操作基本命令
查看索引 : show index from table_name 创建索引:create index index_name on table_name(column_name) 创建唯一索引:cre ...
- (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)
注意事项 指令语法的优先级: where > group by >order by > limit 例:select count(id) as cnt,age from tablen ...
- 20165313Java实验四 Android程序设计
实验报告封面 课程:Java程序设计 班级:1653班 姓名:张晨晖 学号:20165313 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:13:45 - 15:25 实验序号:实验四 ...
- js实现一条抛物线
抛物线运动解释: 以右开口为例,根据公式 y^2 = 2px .确定p的值,已知x求y. <!DOCTYPE html> <html> <head> <me ...
- 【liunx】时间处理函数
一.脚本示例 [mylinuxaccount@linux01 ~]$ date +%Y%m%d 20171224 [mylinuxaccount@linux01 ~]$ date +%F 2017-1 ...
- LA3510 Pixel Shuffle
题意 PDF 分析 思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换. 用\(O(n^2k)\)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换) 还是先把A ...
- Architecture options to run a workflow engine
This week a customer called and asked (translated into my own words and shortened): “We do composite ...
- zsh:no matches found 问题解决
解决方法: ~/.zshrc 文件加入: setopt no_nomatch 之后,更新配置 source ~/.zshrc
- HDU2220 Eddy's AC难题
版权声明:长风原创 https://blog.csdn.net/u012846486/article/details/27853287 Eddy's AC难题 Time Limit: 3000/100 ...
- VBA: 怎样批量数据从Excel派出到Visio
上周派到了个case, 是批量从Excel导出数据导Visio每个图形中. 花了些时间实现了这个功能. 原理如下: 打开Excel 新建/打开表单 指向所选择的表单 遍历所在列的所有数据 打开Visi ...