Java函数式编程入门之Function<T,R>接口

本文介绍了如何在Java8中使用函数式编程,通过Function接口将函数作为参数传递。通过示例展示了如何声明一个接受Function参数的加密方法,并通过MD5加密函数和Lambda表达式进行调用,实现了函数传递的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刘盾 原创文章 于 2022-09-24

先抛出一个问题:
Java中可以像JavaScript那样,把一个函数直接当做参数来传递吗?
从Java 8开始,是可以的。在Java提供的函数式编程接口中,Function<T,R>接口的作用的是用来表现一个参数类型为T、返回值类型为R的函数(方法)。下面,以加密功能举例,实现Java中把函数作为参数进行传递的效果。

1.声明方法
首先,我们来声明一个参数类型为函数的文本加密方法。该方法从控制台接收输入的字符串,调用传入的加密函数进行加密,并返回。
注意这个方法的参数,是Function<String,String>,说明可以传入的参数是一个函数,函数的参数是String,返回值也是String类型。

/**
 * 对控制台文本进行加密的方法
 * @param signer 传入的加密函数
 * @return 加密之后的密文
 */
protected static String sign(Function<String, String> signer) {
    System.out.println("请输入要加密的字串:");
    String str = new Scanner(System.in).next();
    return signer.apply(str);
}

2.调用方法并传入一个函数(方式1)
声明一个基于MD5算法的加密函数md5Sign,在main方法中调用sign方法并传入这个加密函数。

/**
 * md5加密函数
 * @param signStr 要加密的明文
 * @return 加密后的密文
 */
protected static String md5Sign(String signStr) {
    MessageDigest md5 = null;
    try {
        md5 = MessageDigest.getInstance("md5");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return new String(md5.digest(signStr.getBytes()));
}

public static void main(String[] args)throws Exception {
    String result = sign(FunctionTest::md5Sign);
    System.out.println("加密后:"+result);
}

3.调用方法并传入一个函数(方式2)
上面的方式把要传入的函数单独进行了声明,但是如果代码不多,可以省略声明,而是在调用的时候直接传入,这种语法叫Lambda表达式。Lambda表达式也可以看做是一种匿名函数。
Lambda表达式分为三个部分:(形参) -> {函数体代码},整个表达式其实就是一个函数。第一部分,形参如果只有一个,()可以省略;第二部分是一个箭头,是固定要写的;第三部分是代码,如果代码只有一行,{}可以省略。

public static void main(String[] args){
    String result = sign(str -> { //Lambda表达式从从str -> 这里开始 
        try {
            return new String(MessageDigest.getInstance("md5").digest(str.getBytes()));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }); //Lambda表达式在}这里结束
    System.out.println("加密后:"+result);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六吨代码

肝到半夜了,赏五毛行不?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值