首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 8 Function 函数接口

Java 8 Function 函数接口

作者头像
未读代码
发布于 2021-08-12 06:51:14
发布于 2021-08-12 06:51:14
75202
代码可运行
举报
运行总次数:2
代码可运行

封面图:绍兴 · 三味书屋(2021-07-10)

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

Function 接口源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WWW.WDBYTE.COM

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
14

2. Function andThen

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
}

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
28

3. List -> Map

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{java=4, wdbyte.com=10, nodejs=6}
{java=4, wdbyte.com=10, nodejs=6}

4. List -> List<Other>

示例 :输入一个字符串 List 集合 <T> List<String> ,返回大写形式的字符串 List 集合,返回小写形式的字符串 List 集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.wdbyte;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

public class Java8FunctionString {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("Java", "Nodejs", "Wdbyte.com");
        // 方法引用方式
        List<String> upperList = map(list, String::toUpperCase);
        List<String> lowerList = map(list, String::toLowerCase);
        System.out.println(upperList);
        System.out.println(lowerList);

        // Lambda 方式
        List<String> upperList2 = map(list, x -> x.toUpperCase());
        List<String> lowerList2 = map(list, x -> x.toLowerCase());
        System.out.println(upperList2);
        System.out.println(lowerList2);

    }

    public static <T, R> List<R> map(List<T> list, Function<T, R> function) {
        List<R> resultList = new ArrayList<>(list.size());
        for (T t : list) {
            resultList.add(function.apply(t));
        }
        return resultList;
    }
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[JAVA, NODEJS, WDBYTE.COM]
[java, nodejs, wdbyte.com]
[JAVA, NODEJS, WDBYTE.COM]
[java, nodejs, wdbyte.com]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿阿朗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
高质量前端快照方案:来自页面的「自拍」
将网页保存为图片(以下简称为快照),是用户记录和分享页面信息的有效手段,在各种兴趣测试和营销推广等形式的活动页面中尤为常见。
ConardLi
2019/12/19
2.9K0
高质量前端快照方案:来自页面的「自拍」
【Web技术】929- 前端海报生成的不同方案和优劣
首页测试demo:https://html2canvas.hertzen.com/
pingan8787
2021/04/26
1.6K0
【Web技术】929- 前端海报生成的不同方案和优劣
浅谈两种前端截图方式:Canvas截图 vs SVG截图
如今很多网站都引入截图功能,可用于问题反馈、内容分享等实用需求,而前端截图也不知不觉成为了首选。今天为大家推荐两种前端截图方式,虽然有些局限,但是也能应付大部分项目需求。
JowayYoung
2020/04/01
14.2K2
2种方式!带你快速实现前端截图
导语 | 本文将介绍在前端开发中页面截图的两种方式,包括对其实现原理和使用方式进行详细阐述,希望能为更多前端开发者提供一些经验和帮助。 一、 背景 页面截图功能在前端开发中,特别是营销场景相关的需求中, 是比较常见的。比如截屏分享,相对于普通的链接分享,截屏分享具有更丰富的展示、更多的信息承载等优势。最近在需求开发中遇到了相关的功能,所以调研了相关的实现和原理。 二、相关技术 前端要实现页面截图的功能,现在比较常见的方式是使用开源的截图npm库,一般使用比较多的npm库有以下两个: dom-to-image
腾讯云开发者
2022/03/03
4.4K1
【前端探索】移动端H5生成截图海报的探索
移动端H5生成图片海报分享,是比较常见的交互方式。生成的海报中,往往会有用户的个性化信息,比如头像、昵称等等。
luciozhang
2023/04/22
8240
# 浏览器截图方案分析
html2canvasopen in new window 用的比较广泛的前端截图方案,先将 DOM 一个个 转为 Canvas 然后导出图片(使用 canvas 自带的 toDataUrl、toBobl)即可。使用起来应该是兼容性比较好的方案了,能解决大部分的需求,但是也有一写小问题,如:
九旬
2023/10/19
5500
Vue 一键导出 PDF
生成 PDF 基本思路大多一致,先用 html2canvas 将 DOM 元素转换为 canvas,再利用 canvas 的 toDataURL 方法输出为图片,最后使用 jsPDF 添加图片生成 PDF 实现一键下载。
数媒派
2022/12/01
2K0
vue前端怎么导出图片_VUE中将页面导出为图片或者PDF
1.将页面html转换成图片 npm install html2canvas –save
全栈程序员站长
2022/09/01
2.8K0
Web动态图片合成与分享——html2canvas方案实践
在web侧运营活动中,分享传播是重要的一环。普通的h5链接/结构化消息分享已经不能满足产品越来越大的脑洞。在很多场景下,我们需要将个性化内容(如帐号信息,头像,用户输入等)固化为一张完整的图片,一秒分享到朋友圈&AIO&群,藉此提高传播效率。
WendyGrandOrder
2018/10/19
8.5K2
Web动态图片合成与分享——html2canvas方案实践
html2canvas - 项目中遇到的那些坑点汇总
因为css里的只是展示画布显示的大小,不像这样是canvas真正的内里图画分辨率的大小。
xing.org1^
2020/06/29
4.7K0
Vue页面生成分享海报最详说明(含二维码+多种水印方式+常见的坑处理)
解决办法: 如果使用的是uni-app中的image标签 需要替换为 img标签,image标签在uni-app中其实是背景图片
我只会写Bug啊
2023/12/25
7510
html2canvas图片模糊解决方案
页面采用ViewPort方案,解决iOS上的1px的边框问题,采用这个方案,在iOS上渲染出来的Dom会自动乘以devicePixelRatio,因此iOS上的Canvas相当于被直接放大了,没有出现模糊的情况。
xferris
2019/12/30
4.4K0
​html2canvas 出现图片无法展示
最近接收到一个优化需求:就是对之前的行程文档的图文介绍添加打印生成 pdf 的功能
公众号---人生代码
2020/11/26
2.5K0
使用 html2canvas 生成分享图片,CDN图片不展示问题
生成分享图片,包含后端返回的图文,图片是 cdn 资源。开始尝试使用 html2canvas 时,使用的是本地图片,生成截图无问题。
用户10106350
2022/10/28
2.2K0
页面DOM导出PDF
页面DOM导出PDF Nginx设置允许跨域 location /static { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; index index.html; root /data/wwwjarapi/8905xhkjfileapitest/; } 也就是在location下添加 add_header 'Access-Control-
码客说
2020/05/09
2.9K0
jscanvas合成图片实现微信公众号海报功能
在微信公众号开发中,很多时候都有个需求是一张图加上头像和昵称或者其他数据生成自己的二维码海报或者是生成分享海报
仙士可
2019/12/19
1.4K0
html2canvas实现浏览器截图的原理(包含源码分析的通用方法)
有时用户希望将我们的报表页面分享到其他的渠道,比如邮件、PPT等,每次都需要自己截图,一是很麻烦,二是截出来的图大小不一。
Kagol
2020/12/22
2.2K0
html2canvas实现浏览器截图的原理(包含源码分析的通用方法)
【架构师(第五十二篇)】 几个前端工具的基本使用
设备像素也被称为物理像素,是显示设备中一个最微小的物理部件,在同一设备中,物理像素的总数是固定的。
一尾流莺
2022/12/10
4220
Vue 结合html2canvas和jsPDF实现html页面转pdf
E:\MyProjects\TMP\frontend>npm install html2canvas
授客
2020/04/30
5K0
Vue 结合html2canvas和jsPDF实现html页面转pdf
JS - 原生js实现 网页截图(+下载截图) 功能
实现:html2canvas + canvas.toDataURL 首先,引入依赖插件: import { html2canvas } from './html2canvas'; html2canvas截图模糊处理: 1 /*图片跨域及截图模糊处理*/ 2 let canvasContent = document.getElementById('canvas'),//需要截图的包裹的(原生的)DOM 对象 3 width = canvasContent.clientWidth,//canvas
xing.org1^
2018/05/17
30.5K1
推荐阅读
相关推荐
高质量前端快照方案:来自页面的「自拍」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档