闲话不多说,直接看代码,注释都写的很清楚了。

package com;

import java.util.function.BiFunction;
import java.util.function.Function; public class DemoFunction { public static void main(String[] args) {
DemoFunction t1 = new DemoFunction();
// Function函数的使用
Integer addResult = t1.compute(3, value -> value + value);
System.out.println("加法结果:" + addResult); Integer subResult = t1.compute(3, value -> value - 1);
System.out.println("减法结果:" + subResult); Integer multipResult = t1.compute(3, value -> value * value);
System.out.println("乘法结果:" + multipResult); Integer divisionResult = t1.compute(6, value -> value / 3);
System.out.println("除法结果:" + divisionResult); // 使用compose场景, 从右向左处理, 这里就是 (6 * 6) + 10 = 46
Integer composeResult = t1.computeForCompose(6,
value -> value + 10,
value -> value * value);
System.out.println("Function compose 结果:" + composeResult); // 使用andThen场景, 从左向右处理, 这里就是(3 + 20) - 10 = 13
Integer andThenResult = t1.computeForAndThen(3,
value -> value + 20,
value -> value - 10);
System.out.println("Function andThen 结果:" + andThenResult); // 使用 BiFunctioin场景, 这里是 2 + 3 = 5
Integer biFuncResult = t1.computeForBiFunction(2, 3,
(v1, v2) -> v1 + v2);
System.out.println("BiFunction 结果:" + biFuncResult); // 使用 BiFunctioin andThen场景, 这里是 (2 * 3) + 6 = 12
Integer biFuncAndThenResult = t1.computeForBiFunctionAndThen(2, 3,
(v1, v2) -> v1 * v2, v1 -> v1 + 6);
System.out.println("BiFunction andThen 结果:" + biFuncAndThenResult); } /**
* @param num
* @param function
* @return
* @desc 使用JDK8 Function函数
*/
private Integer compute(Integer num, Function<Integer, Integer> function) {
Integer result = function.apply(num);
return result;
} /**
* @param num
* @param function1
* @param function2
* @return
* @desc 使用compose函数,简单的说,就是从右向左处理。
*/
private Integer computeForCompose(Integer num,
Function<Integer, Integer> function1,
Function<Integer, Integer> function2) {
return function1.compose(function2).apply(num);
} /**
* @param num
* @param function1
* @param function2
* @return
* @desc 使用andThen函数,简单的说,就是从左向右处理。
*/
private Integer computeForAndThen(Integer num,
Function<Integer, Integer> function1,
Function<Integer, Integer> function2) {
return function1.andThen(function2).apply(num);
} /**
* @param num1
* @param nuum2
* @param biFunction
* @return
* @desc 使用BiFunction
*/
private Integer computeForBiFunction(Integer num1, Integer num2,
BiFunction<Integer, Integer, Integer> biFunction) {
return biFunction.apply(num1, num2);
} /**
* @param num1
* @param num2
* @param biFunction
* @param function
* @return
* @desc 使用BiFunction andThen方法
*/
private Integer computeForBiFunctionAndThen(Integer num1, Integer num2,
BiFunction<Integer, Integer, Integer> biFunction,
Function<Integer, Integer> function) {
return biFunction.andThen(function).apply(num1, num2);
} }

Java8新特性Function、BiFunction使用的更多相关文章

  1. Java8 新特性之Stream----java.util.stream

    这个包主要提供元素的streams函数操作,比如对collections的map,reduce. 例如: int sum = widgets.stream() .filter(b -> b.ge ...

  2. 这可能是史上最好的 Java8 新特性 Stream 流教程

    本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...

  3. java8新特性--Stream的基本介绍和使用

    什么是Stream? Stream是一个来自数据源的元素队列并可以进行聚合操作. 数据源:流的来源. 可以是集合,数组,I/O channel, 产生器generator 等 聚合操作:类似SQL语句 ...

  4. 乐字节-Java8新特性之方法引用

    上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...

  5. Java8新特性之Lambda表达式

    lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...

  6. java8 新特性学习笔记

    Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...

  7. 2020你还不会Java8新特性?

    Java8(1)新特性介绍及Lambda表达式 前言: 跟大娃一块看,把原来的电脑拿出来放中间看视频用 --- 以后会有的课程 难度 深入Java 8 难度1 并发与netty 难度3 JVM 难度4 ...

  8. Java8 新特性_Lambda 表达式

    1. Java8新特性_简介 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 减少空指针异常的容器 Optional 2. ...

  9. 【Java8新特性】还没搞懂函数式接口?赶快过来看看吧!

    写在前面 Java8中内置了一些在开发中常用的函数式接口,极大的提高了我们的开发效率.那么,问题来了,你知道都有哪些函数式接口吗? 函数式接口总览 这里,我使用表格的形式来简单说明下Java8中提供的 ...

随机推荐

  1. netty-websocket-spring-boot-starter关闭报错 io/netty/channel/AbstractChannel$AbstractUnsafe io/netty/util/concurrent/GlobalEventExecutor

    报错 java.lang.NoClassDefFoundError: io/netty/channel/AbstractChannel$AbstractUnsafe$ at io.netty.chan ...

  2. (三)用CONCAT 函数 拼接字段

    一.将两个列拼接成一个列 数据源 select CONCAT(TRIM(username),'(',locaiton,')') from user2 解释: TRIM()函数用于去除字符串左右两边的空 ...

  3. [LeetCode] 86. Partition List 划分链表

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  4. [LeetCode] 857. Minimum Cost to Hire K Workers 雇K个工人的最小花费

    There are N workers.  The i-th worker has a quality[i] and a minimum wage expectation wage[i]. Now w ...

  5. mysql索引数据结构

    什么是索引?索引就是排好序的数据结构,可以帮助我们快速的查找到数据 推荐一个网站,可以演示各种数据结构:https://www.cs.usfca.edu/~galles/visualization/A ...

  6. android基础---->SharedPreferences的使用

    SharedPreferences 还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的,存储的数据是一个字符串,读取出来的数据仍然是字符串.这样你应该就能明显地感觉到 ...

  7. Influx Sql系列教程七:delete 删除数据

    前面介绍了使用insert实现新增和修改记录的使用姿势,接下来我们看一下另外一个简单的使用方式,如何删除数据 1. delete 语句 delete的官方语法如下 DELETE FROM <me ...

  8. jquery json对象转换

    jquery json对象转换 <pre>//json数组转json串var arr = [1,2,3, { a : 1 } ];JSON.stringify( arr ); //json ...

  9. [CMD] 批处理

    https://www.tutorialspoint.com/batch_script/batch_script_commands.htm

  10. 20 IO流(十七)——Commons工具包,FileUtils(二)——copy方法

    copy方法 package com.sxt.copy; import java.io.File; import java.io.IOException; import java.net.URL; i ...