美文网首页
lambda系列之函数式编程

lambda系列之函数式编程

作者: 程序员小白成长记 | 来源:发表于2020-08-19 15:35 被阅读0次

    一、前言

    1.1 什么叫做函数式编程,函数式编程有什么特点

    1,接口中只有一个方法的时候才可使用lambda表达式;
    函数式接口只有一个抽象方法,函数式接口可以包含多个default方法,可以包含多个static方法。
    2,lambda表达式可以根据接口的参数和返回值的定义自动推断返回值和入参的类型,所以参数类型可以省略

    二、函数编程示例一

    编写一个接口,方法为可以通过传入对象返回对象id(定义取id的规则)

    • 实体类:Student
    public class Student {
    
        private Integer id;
        private String shortId;
        private String name;
    
        public Student(){
    
        }
    
        public Student(Integer id, String shortId, String name) {
            this.id = id;
            this.shortId = shortId;
            this.name = name;
    
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getShortId() {
            return shortId;
        }
    
        public void setShortId(String shortId) {
            this.shortId = shortId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    • 函数式接口: GetId
    public interface GetId<T> {
        String getId(T t);
    }
    
    • 测试类: GetId
    public class Test {
        public static void main(String[] args) {
            List<Student> students = new ArrayList<>();
            for (int i = 0; i < 3; i++) {
                Student t = new Student();
                t.setId(i);
                t.setShortId("shortId: " + i);
                t.setName("test" + i);
                students.add(t);
            }
    
            GetId<Student> mapper = t -> t.getShortId();
            List res = filterList(mapper, students);
            res.stream().forEach(System.out::println);
        }
        
        public static List filterList(GetId mapper, List<Student> students) {
            return students.stream().map(t -> mapper.getId(t)).collect(Collectors.toList());
        }
    }
    

    输出:

    shortId: 0
    shortId: 1
    shortId: 2

    三、函数式接口@FunctionalInterface

    该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错

    函数式接口@FunctionalInterface

    相关文章

      网友评论

          本文标题:lambda系列之函数式编程

          本文链接:https://www.haomeiwen.com/subject/ittdjktx.html