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. Codeforces 845D - Two TVs(贪心)

    原题链接:http://codeforces.com/problemset/problem/845/D 题意:一个人在驾照考试中,路边有“限速XX”.“没有限速”.“可以超车”.“不能超车”路牌, 以 ...

  2. Python分析《武林外传》

    我一向比较喜欢看武侠电影.小说,但是06年武林外传开播的时候并没有追剧,简单扫几眼之后发现他们都不会那种飞来飞去的打,一点也不刺激.09年在南京培训的时候,日子简单无聊透顶,大好的周末不能出门,只能窝 ...

  3. 前端基础知识-----HTML

    一.HTML基础概述 HTML:超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准语言.也就是一般我们在浏览器里看到的东西的书写格式,与 ...

  4. eclipse调试debug时出现source not found

    eclipse调试debug时出现source not found 在代码中设置了断点,程序调试过程中可以继续运行使用断点,但是看不见程序走到哪了,debug页面出现source not found, ...

  5. ajax总结及案例

    一.实验简介 目的:检验输入登录名在数据库中是否存在,如果存在,当鼠标移出登录名框后,会提示用户名已存在,并且鼠标指针自动回到登录名框内. 操作步骤: 1.获取登录名的值 2.根据获取的登录名,组织查 ...

  6. Vagrant 入门 - 网络

    原文地址 现在,我们启动了 web 服务器,并且通过同步目录使用宿主机上的文件提供服务.然而,还只能通过虚拟机中的终端访问服务器.这一章节中,我们会使用 Vagrant 的网络特性,配置 Vagran ...

  7. httpclient模拟服务器请求

    // 创建默认的httpClient实例. CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httppost Ht ...

  8. PHP_CodeIgniter Github实现个人空间

    github支持github Pages 可以实现自己的个人空间 XXX.github.io/project 1 注册自己的github账户 2 需要设置自己的user_name, user_name ...

  9. dp(最长升序列:二分查找时间优化nlogn)

    We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, insertion sort, sele ...

  10. Day7-----Python的序列类(有子类:元组类,列表类)

    序列类型 1.基本介绍: 序列类型是一种基类类型  ,既然被称为那就肯定是有道理的,关于序列 它有  正向  和  反向  两种序号,正向序号从零开始,反向序号从负一开始 a = '例如这个字符串' ...