【Java 8 新特性】Java 8中的Function.apply方法

102 篇文章 73 订阅

Java 8中的Function.apply方法


java.util.function.Function是一个接口,已经在 Java 8中引入。

Function是一个函数接口。

因此它可以用来接受lambda表达式。

函数接受一个参数并返回结果。

函数接口包含一种方法apply()

这是函数接口方法。

查找apply()方法的声明。

R apply(T t)

其中T是函数参数,R是结果。

要使用它,我们需要定义功能。

假设我们在学生类中有一个方法customShow(),它将接受Function实例。

查找学生类。

Student.java

import java.util.function.Function;
public class Student {
    public String name;
    public int age;
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
    public  String customShow(Function<Student,String> fun){
        return fun.apply(this);
    }
}

有一个接受函数接口的customShow()方法。

现在,我们可以通过三种方式创建函数实例。

for(Student st: list){
    System.out.println(st.customShow(s->s.name+": "+s.name));
}

这是第一种方式。只需将s->s.name+": "+s.name作为Function实例传递给customShow方法。

Function<Student,String> styleOne = s->{
     String result =  "Name:"+s.name +" and Age:"+s.age;
     return result;
};

在第二种方法中,我们在单独的位置声明Function并操纵结果,最后返回。

Function<Student,String> styleTwo = s->        
            "Name:"+s.name +" and Age:"+s.age;

第三种方式,在一行中定义函数。

因此,customShow()方法将接受Function实例,而Functionapply()方法将执行如何定义函数。

查找完整的示例。

FunctionDemo.java

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
public class FunctionDemo {
    public static void main(String[] args) {
        List<Student> list = new ArrayList();
        list.add(new Student("Ram",20));
        list.add(new Student("Shyam",22));
        list.add(new Student("Kabir",18));
        
        // Simple use of function
        for(Student st: list){
            System.out.println(st.customShow(s->s.name+": "+s.name));
        }
        
        //Style one to declare function 
        Function<Student,String> styleOne = s->{
            String result =  "Name:"+s.name +" and Age:"+s.age;
            return result;
        };
        
        //Style two to declare function
        Function<Student,String> styleTwo = s->        
            "Name:"+s.name +" and Age:"+s.age;
        
        System.out.println("--print value by style one--");
        //print the values of list using stle one function
        for(Student st: list){
            System.out.println(st.customShow(styleOne));
        }
        
        System.out.println("--print value by style two--");
        //print the values of list using style two function
        for(Student st: list){
            System.out.println(st.customShow(styleTwo));
        }
        
    }
} 

输出

Ram: Ram
Shyam: Shyam
Kabir: Kabir
--print value by style one--
Name:Ram and Age:20
Name:Shyam and Age:22
Name:Kabir and Age:18
--print value by style two--
Name:Ram and Age:20
Name:Shyam and Age:22
Name:Kabir and Age:18

参考文献

【1】Function.apply in Java 8

Java 8引入了Function接口和Lambda表达式,这些新特性使得函数式编程变得更加容易和灵活。 Function接口是一个函数式接口,它定义了一个接受一个参数并返回一个结果的函数。它有一个抽象方法apply(),这个方法接受一个参数并返回一个结果。Function接口有多个默认方法可以组合成复杂的函数链,比如andThen()和compose()方法。 Lambda表达式是一种可以代替匿名内部类的语法,它可以用来创建函数式接口的实例。Lambda表达式由三个部分组成:参数列表、箭头符号和方法体。Lambda表达式的参数列表和方法体可以根据上下文自动推断,这使得代码更加简洁易读。 下面是一个使用Function和Lambda表达式的示例代码: ``` Function<Integer, Integer> square = x -> x * x; int result = square.apply(5); // result = 25 ``` 这个代码定义了一个Function接口的实例square,它接受一个整数参数并返回它的平方。然后我们可以调用这个实例的apply()方法来计算5的平方,结果为25。 Lambda表达式可以用来代替匿名内部类,使得代码更加简洁易读。比如下面这个代码: ``` Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, world!"); } }; ``` 可以使用Lambda表达式来简化为: ``` Runnable runnable = () -> System.out.println("Hello, world!"); ``` 这个代码定义了一个Runnable接口的实例runnable,它的run()方法会输出一条消息。Lambda表达式的箭头符号左侧没有参数,因为run()方法不接受任何参数。箭头符号右侧的方法体只有一条语句,因此可以省略大括号和分号。 总之,Java 8的Function和Lambda表达式为函数式编程带来了更加灵活和易用的工具,使得Java程序员可以更加方便地编写函数式风格的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猫巳

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值