Java JDK1.8新特性之四大函数式接口
JDK 1.8的一些新特性
四大核心函数式接口(Consumer、Predicate、Supplier、Function),结合lambda表达式
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class JDk18Demo {
public static void main(String[] args) {
// foreach();
// function();
supplier();
predicate();
}
/**
* Predicate接口:断言接口,断言可理解为测试的意思
* 测试给定字符串列表中哪些字符串包含小写字母m
*/
private static void predicate() {
List<String> list = Arrays.asList("Mikey", "Lily", "Jimy", "Tom");
// 有没有参数取决于接口中的方法有没有参数 boolean test(T t);
List<String> results = filter(list, (str) -> str.contains("m"));
results.forEach(System.out::println);
}
private static List<String> filter(List<String> list, Predicate<String> p) {
List<String> results = new ArrayList<>();
for (String str : list) {
if (p.test(str)) {// 测试是否符合要求
results.add(str);
}
}
return results;
}
/**
* Supplier接口:代表结果供应商
*/
private static void supplier() {
List<Integer> list = getNums(10, () -> (int) (Math.random() * 100));
list.forEach(System.out::println);
}
// 获取num个随机数,由调用者给出具体实现
private static List<Integer> getNums(int num, Supplier<Integer> sup) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
list.add(sup.get());
}
return list;
}
/**
* Function<T, R>接口:表示接收一个参数并产生结果的函数
*/
private static void function() {
String s = strToUpp("lowercase", (str) -> str.toUpperCase());
System.out.println(s);
}
// 将给定字符串转为大写,由调用者给出具体实现
private static String strToUpp(String str, Function<String, String> f) {
return f.apply(str);
}
/**
* Consumer接口:消费者接口
* jdk 1.8中的新的迭代方法
*/
private static void foreach() {
List<String> list = new ArrayList<>();
list.add("Tom");
list.add("Mikey");
list.add("Lily");
list.forEach((String s) -> {
System.out.println(s);
});
// 只有一行代码,可简写为
list.forEach(s -> System.out.println(s));
// 进一步可用新语法写为
list.forEach(System.out::println);
}
}
Java JDK1.8新特性之四大函数式接口的更多相关文章
- JAVA 8 主要新特性 ----------------(四)Lambda函数式接口
一.什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口. 你可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法 ...
- java8新特性学习:函数式接口
本文概要 什么是函数式接口? 如何定义函数式接口? 常用的函数式接口 函数式接口语法注意事项 总结 1. 什么是函数式接口? 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口 ...
- Java8新特性探索之函数式接口
一.为什么引入函数式接口 作为Java函数式编程爱好者,我们都知道方法引用和 Lambda 表达式都必须被赋值,同时赋值需要类型信息才能使编译器保证类型的正确性. 我们先看一个Lambda代码示例: ...
- 01 语言基础+高级:1-10 JDK8新特性_day12【函数式接口】
day12[函数式接口] 主要内容自定义函数式接口函数式编程常用函数式接口 教学目标能够使用@FunctionalInterface注解能够自定义无参无返回函数式接口能够自定义有参有返回函数式接口能够 ...
- java8新特性 - 什么是函数式接口 @FunctionalInterface?
什么是函数式接口 @FunctionalInterface 源码定义 /** * An informative annotation type used to indicate that an int ...
- Java——jdk1.5新特性
/* * 可变参数:--一个方法的参数个数不固定. * 特点: * 只能出现在参数列表的最后. * 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参 ...
- JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用
jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default Lambda表达式 L ...
- JDK1.8新特性之(三)--函数式接口
在上一篇文章中我们介绍了JDK1.8的新特性有以下几项. 1.Lambda表达式 2.方法引用 3.函数式接口 4.默认方法 5.Stream 6.Optional类 7.Nashorm javasc ...
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
随机推荐
- 如何把word文档内容和图片直接导入到wordpress编辑器
Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...
- JS占位符替换
String.prototype.format = function() { if(arguments.length === 0) return this; var obj = arguments[0 ...
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- 关闭本机的代理服务(Proxy)
若您使用了代理服务(Proxy),可能会导致战网游戏发生网络连接.安装或更新方面的问题.请参考以下步骤来关闭您电脑的网络代理服务. Windows 按下 Windows 按鍵 + R . 在运行框中, ...
- change可以重命名列名,也可能修改列的类型和约束,而modify只能修改列的数据类型。
change 可以重命名列名,也可能修改列的数据类型,而modify只能修改列的数据类型. change 比modify功能多,如果要用change修改字段类型和约束,要加上新字段名,新字段名可以和原 ...
- 126B Password[扩展kmp学习]
题目大意 给你一个字符串,求它的一个子串使得这个子串即使前缀又是后缀又出现在不是前缀且不是后缀的地方 分析 扩展kmp就是定义z[i]表示i~n的子串与整个串的最长公共前缀的长度是z[i] 所以这个题 ...
- brdd 惰性执行 mapreduce 提取指定类型值 WebUi 作业信息 全局临时视图 pyspark scala spark 安装
[rdd 惰性执行] 为了提高计算效率 spark 采用了哪些机制 1-rdd 基于分布式内存数据集进行运算 2-lazy evaluation :惰性执行,即rdd的变换操作并不是在运行该代码时立 ...
- Using Xmanager to connect to remote CentOS 7 via XDMCP
Gnome in CentOS 7 tries to use local hardware acceleration and this becomes a problem when trying to ...
- Vagrant 入门 - 清理(teardown)
原文地址 我们现在有一个功能齐全的虚拟机,可以用于基本 Web 开发.但如果现在需要更换设备,或者在另一个项目上工作,如何清理我们的开发环境? 借助 Vagrant,可以暂停(suspend),停止( ...
- HTML设置<table>的<td>横跨3列
第一步:html中 <table> <tr> <td>列一</td> <td>列二</td> <td>列三</ ...