Java特性Function基础功能特性使用

server/2024/10/18 9:31:39/

在 Java 8 中,Function 接口是一个函数接口,它位于包 java.util.function 下。 Function 接口中定义了一个 R apply(T t) 方法,它可以接受一个泛型 T 对象,返回一个泛型 R 对象,即参数类型和返回类型可以不同。

Function 接口源码: 

java">@FunctionalInterface
public interface Function<T, R> {R apply(T t);default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {Objects.requireNonNull(before);return (V v) -> apply(before.apply(v));}default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {Objects.requireNonNull(after);return (T t) -> after.apply(apply(t));}static <T> Function<T, T> identity() {return t -> t;}
}

1. Function apply

示例 1:输入一个字符串 <T> String, 返回字符串的大写形式 <R> String

java">package com.wdbyte;import java.util.function.Function;public class Java8Function {public static void main(String[] args) {Function<String, String> toUpperCase = str -> str.toUpperCase();String result = toUpperCase.apply("www.wdbyte.com");System.out.println(result);}
}

输出结果:

WWW.WDBYTE.COM

示例 2:输入一个字符串 <T> String,返回字符串的长度 <R> Integer。 

java">package com.wdbyte;import java.util.function.Function;public class Java8FunctionLength {public static void main(String[] args) {Function<String, Integer> lengthFunction = str -> str.length();Integer length = lengthFunction.apply("www.wdbyte.com");System.out.println(length);}
}

输出结果:

14

2. Function andThen

Function 函数接口的 andThen() 方法可以让多个 Function 函数连接使用。

示例:输入一个字符串,获取字符串的长度,然后乘上 2。

java">package com.wdbyte;import java.util.function.Function;public class Java8FunctionAndThen {public static void main(String[] args) {Function<String, Integer> lengthFunction = str -> str.length();Function<Integer, Integer> doubleFunction = length -> length * 2;Integer doubleLength = lengthFunction.andThen(doubleFunction).apply("www.wdbyte.com");System.out.println(doubleLength);}
}

结果:

28

3. List -> Map

示例:输入一个字符串 List 集合 <T> List<String> , 返回一个 key 为字符串本身,Value 为字符串长度的 Map

java">package com.wdbyte;import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;public class Java8FunctionListToMap {public static void main(String[] args) {List<String> list = Arrays.asList("java", "nodejs", "wdbyte.com");// lambda 方式Function<String, Integer> lengthFunction = str -> str.length();Map<String, Integer> listToMap = listToMap(list, lengthFunction);System.out.println(listToMap);// 方法引用方式Map<String, Integer> listToMap2 = listToMap(list, String::length);System.out.println(listToMap2);}public static <T, R> Map<T, R> listToMap(List<T> list, Function<T, R> function) {HashMap<T, R> hashMap = new HashMap<>();for (T t : list) {hashMap.put(t, function.apply(t));}return hashMap;}
}

输出结果:

{java=4, wdbyte.com=10, nodejs=6}
{java=4, wdbyte.com=10, nodejs=6}

 


http://www.ppmy.cn/server/38283.html

相关文章

软件设计师-应用技术-面向对象程序设计题5

考题形式&#xff1a; 代码填空&#xff0c;5 - 6空&#xff0c;每空3分。 基础知识及技巧&#xff1a; 1. 类的定义&#xff1a; 2. 接口的定义&#xff1a; 给实现类具体代码&#xff0c;填写接口中方法。 3. 类、抽象类、继承类、抽象方法的定义&#xff1a; 抽象类&…

RESTful API 构建 Web 应用程序

RESTful API 是一种设计风格&#xff0c;用于创建和管理 Web 应用程序的 API。REST&#xff08;Representational State Transfer&#xff09;表示一组规范和约定&#xff0c;用于在网络上传输和操作数据。RESTful API 使用 HTTP 方法&#xff08;如 GET、POST、PUT、DELETE&am…

鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南

几点说明 kernel_liteos_a_note | 中文注解鸿蒙内核 是在 OpenHarmony 的 kernel_liteos_a 基础上给内核源码加上中文注解的版本.与官方源码按月保持同步,同步历史如下: 2021/10/09 – 增加性能优化模块perf,优化了文件映射模块2021/09/14 – common,extended等几个目录结构和M…

鼠标移到图片上,光线闪过效果的实现

本文用两种方式实现了鼠标移动到图片上时&#xff0c;有光线闪过的效果。 第一种&#xff1a;使用::before伪元素实现。 1.html代码部分 <div classcontainer><div class"item"><a href"#"><div><img src"./img/dizi.j…

考研逆天改命,双非逆袭985!

这个系列会邀请上岸学长学姐进行经验分享~ 今天分享经验的同学是双非上岸中国海洋大学&#xff01; 大家好&#xff0c;先自我介绍一下&#xff0c;我是应届考生&#xff0c;报考的专业是新一代电子信息技术&#xff08;产教融合&#xff09;&#xff0c;总分377&#xff0c;…

C#高级编程笔记-运算符和类型强制转换

本章将首先讨论基本语言元素&#xff0c;接着论述C#语言的扩展功能。本章的主要内容如下&#xff1a; ● C#中的运算符 ● 使用nameof运算符和空值条件运算符 ● 隐式和显式转换 ● 使用装箱技术把值类型转换为引用类型 ● 比较值类型和引用…

JS笔试手撕题

数据劫持 Vue2的Object.defineProperty() Vue2的响应式是通过Object.defineProperty()拦截数据&#xff0c;将数据转换成getter/setter的形式&#xff0c;在访问数据的时候调用getter函数&#xff0c;在修改数据的时候调用setter函数。然后利用发布-订阅模式&#xff0c;在数…

MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总

在数据库操作中&#xff0c;经常遇到需要将同一组内的多行数据汇总为一个结构化的输出&#xff0c;特别是在处理一对多关系时。MySQL 5.7及以上版本引入了对JSON的支持&#xff0c;使得这一过程变得更加灵活和高效。本文将以一个实例深入探讨如何利用GROUP_CONCAT结合JSON_OBJE…