Introducción a la interfaz Function<T,R> de la programación funcional Java

Artículo original de Liu Dun el 2022-09-24

Permítanme plantear una pregunta primero:
¿Se puede pasar una función directamente como un parámetro en Java como JavaScript?
A partir de Java 8, es posible. En la interfaz de programación funcional proporcionada por Java, la interfaz Function<T,R> se utiliza para representar una función (método) cuyo tipo de parámetro es T y el tipo de valor de retorno es R. A continuación, tome la función de cifrado como ejemplo para darse cuenta del efecto de pasar una función como parámetro en Java.

1. Método de declaración
Primero, declaremos un método de cifrado de texto cuyo tipo de parámetro es función. Este método recibe la cadena de entrada de la consola, llama a la función de cifrado entrante para cifrar y regresa.
注意这个方法的参数,是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. Llame al método y pase una función (método 1)
declare una función de encriptación md5Sign basada en el algoritmo MD5, llame al método de firma en el método principal y pase la función de encriptación.

/**
 * 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. Llame al método y pase una función (modo 2)
El método anterior declara que la función se pasará por separado, pero si no hay muchos códigos, puede omitir la declaración y pasarla directamente al llamar. Esta sintaxis se llama Lambda expresión. La expresión lambda también se puede considerar como una especie de función anónima.
La expresión lambda se divide en tres partes: (parámetro formal) -> {código del cuerpo de la función}, toda la expresión es en realidad una función. La primera parte, si solo hay un parámetro formal, () puede omitirse; la segunda parte es una flecha, que está fijada para ser escrita; la tercera parte es el código, si el código tiene una sola línea, {} puede ser omitido.

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);
}

Supongo que te gusta

Origin blog.csdn.net/liudun_cool/article/details/127028259
Recomendado
Clasificación