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新特性之四大函数式接口的更多相关文章

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

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

  2. java8新特性学习:函数式接口

    本文概要 什么是函数式接口? 如何定义函数式接口? 常用的函数式接口 函数式接口语法注意事项 总结 1. 什么是函数式接口? 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口 ...

  3. Java8新特性探索之函数式接口

    一.为什么引入函数式接口 作为Java函数式编程爱好者,我们都知道方法引用和 Lambda 表达式都必须被赋值,同时赋值需要类型信息才能使编译器保证类型的正确性. 我们先看一个Lambda代码示例: ...

  4. 01 语言基础+高级:1-10 JDK8新特性_day12【函数式接口】

    day12[函数式接口] 主要内容自定义函数式接口函数式编程常用函数式接口 教学目标能够使用@FunctionalInterface注解能够自定义无参无返回函数式接口能够自定义有参有返回函数式接口能够 ...

  5. java8新特性 - 什么是函数式接口 @FunctionalInterface?

    什么是函数式接口 @FunctionalInterface 源码定义 /** * An informative annotation type used to indicate that an int ...

  6. Java——jdk1.5新特性

     /* * 可变参数:--一个方法的参数个数不固定. * 特点: *  只能出现在参数列表的最后. *  调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参 ...

  7. JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用

    jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default   Lambda表达式     L ...

  8. JDK1.8新特性之(三)--函数式接口

    在上一篇文章中我们介绍了JDK1.8的新特性有以下几项. 1.Lambda表达式 2.方法引用 3.函数式接口 4.默认方法 5.Stream 6.Optional类 7.Nashorm javasc ...

  9. [转] Java 8的新特性

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

随机推荐

  1. 学习日记14、EF 时间段查询

    m_Rep.GetList(a => System.Data.Entity.DbFunctions.DiffDays(DateTime.Now, a.EndDate) < date); 命 ...

  2. MyView.java 自己画的view

    package myapplication21.lum.com.mycanvas; import android.content.Context;import android.graphics.Can ...

  3. php-mbstring php7.0-zip

    sudo apt install php-mbstring sudo apt install zip unzip php7.0-zip

  4. hibernate搭建及其增删改查

    一.jar包 最基础的hibernatejar包,以及数据库驱动的jar包 二.数据库 t_user表 id int 主键 自动增长 name varchar() 三.配置文件 <?xml ve ...

  5. MySQL 服务器性能剖析

    这是<高性能 MySQL(第三版)>第三章的读书笔记. 关于服务,常见的问题有: 如何确认服务器是否发挥了最大性能 找出执行慢的语句,为何执行慢 为何在用户端发生间歇性的停顿.卡死 通过性 ...

  6. 第 11 章 python线程与多线程

    一.什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程. 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 多线程(即多 ...

  7. Test Case Design Method - OATS

    [转载] OATS:即Orthogonal Array Testing Strategy,正交表测试策略. 1      OATS的概念: 次数(Runs):简单的说,就是次数是多少,就有多少个用例. ...

  8. HTML5-新增type属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Netty之揭开BootStrap 的神秘面纱

    客户端BootStrap: Bootstrap 是Netty 提供的一个便利的工厂类, 我们可以通过它来完成Netty 的客户端或服务器端的Netty 初始化.下面我先来看一个例子, 从客户端和服务器 ...

  10. mybatis全局配置mybatis-config.xml

    大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBatis 的一些操作进行的封装,我们不能直接看到它的本质,所以先看下不使用容器的时候,也就是编程的方式,MyBa ...