【Java学习】函数式接口、Stream流、方法引用

一、函数式接口

1 概念

@FunctionalInterface -> JDK8
@xxx -> 注解 -> JVM看的, 会编译的
// /**/ -> 注释 -> 给程序猿看的, 不会编译

函数式接⼝在Java中是指:有且仅有⼀个抽象⽅法的接⼝。

函数式接⼝,即适⽤于函数式编程场景的接⼝。⽽Java中的函数式编程体现就是Lambda,所以函数式接⼝ 就是可以适⽤于Lambda使⽤的接⼝。只有确保接⼝中有且仅有⼀个抽象⽅法,Java中的Lambda才能顺利 地进⾏推导。

2 常用函数式接口

1 Supplier接口

仅包含⼀个⽆参的⽅法: T get()

Supplier: 生产者
T get(): 生产对象

public static Person creatPerson(Supplier<Person> supplier){
    return supplier.get();
}
public static void main(String[] args) {
    //Supplier的方法是 T get() T->Person
    String name="张三";
    int age=18;

    Person p=creatPerson(() -> new Person(name,age));
    System.out.println(p);
}

2 Consumer接口

Consumer: 消费者
void accept(T t): 接收t对象, 并且使用
andThen(Consumer after): 两个消费者, 一起消费
return (T t) -> { this.accept(t); after.accept(t); };
consumer1.andThen(consumer2).accept§;
: consumer1.accept(t); consumer2.accept(t)
new Consumer() {
void accept(T t) {
accept(t);
after.accept(t);
}
}

public static void print(Consumer<Person> consumer1,Consumer<Person> consumer2,Person p){
   
    consumer1.andThen(consumer2).accept(p);
}
public static void main(String[] args) {
   
    //Consumer是一个函数式接口,Void accept(T t)
    Person p=new Person("张三",18);

    print(t-> System.out.print(t.getName()+":")
            ,t-> System.out.println("今年"+t.getAge())
            ,p);
}

3 Predicate接口

有时候我们需要对某种类型的数据进⾏判断,从⽽得到⼀个boolean值结果。这时可以 使 java.util.function.Predicate 接⼝。

Predicate 接⼝中包含⼀个抽象⽅法: boolean test(T t)。

  1. Predicate and(Predicate other): this和other两个条件同时成立

    public static void print(Predicate<Person> predicate1,Predicate<Person> predicate2,Person[] ps){
         
        for(Person p:ps){
         
            if(predicate1.and(predicate2).test(p))
            System.out.println(p);
        }
    }
    public static void main(String[] args) {
         
        Person[] people={
         
                new Person("张三",10),
                new Person("张三丰",28)
        };
        print(t->t.getName().startsWith("张"),t->t.getAge()>18,people);
    }
    

    输出结果:

    Person{name=‘张三丰’, age=28}

  2. Predicate or(Predicate other): this和other 一个成立即可

    public static void print(Predicate<Person> predicate1, Predicate<Person> predicate2, Person[] ps){
         
        for(Person p:ps){
         
            if(predicate1.or(predicate2).test(p))
                System.out.println(p);
        }
    }
    public static void main(String[] args) {
         
        Person[] people={
         
                new Person("0张三",10)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值