java基础:学习、使用函数式接口

@FunctionalInterface注解的类为函数接口

如java.utll包中的Comparator

java.util.function包中的Consumer,Supplier等

如何使用?

1,使用接口实现方法

2,使用lambda表达式

3,使用方法引用

 List<String> list = Arrays.asList("aa","bb","cc");
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String str ) {
                System.out.print(str);
            }
        });
        list.forEach(str -> System.out.print(str));
        list.forEach(System.out::print);

一,Consumer接口

消费型 执行accept(T t) 没有返回值 ;可以用于赋值,输出等操作。如ArrayList的forEach(Consumer<? super E> action),Optional的 ifPresent(Consumer<? super T> consumer)

//optional源码
public void ifPresent(Consumer<? super T> consumer) {
        if (value != null)
            consumer.accept(value);
    }

//使用
Optional.ofNullable(email).ifPresent(u->u.setId(5));

Optional.ofNullable(email).ifPresent(new Consumer<EmailBean>() {
            @Override
            public void accept(EmailBean email) {
                email.setId(5);
            }
        });

二,Supplier接口

供给型 执行get()方法 方法无参数,返回一个值,使用这个接口的时候都会返回一个值,并且保存在这个接口中,可以理解为一个容器。用于返回默认值等场景。Optional 的 orElseGet(Supplier<? extends T> other)

  Optional.ofNullable(email).orElseGet(()->new  EmailBean());//如果value为null,则返回调用语句生成的对象



 Supplier<Double> supplier = new Supplier<Double>() {
            @Override
            public Double get() {
                return new Random().nextDouble();
            }
        };
        System.out.println(supplier.get());
        supplier=()->new Random().nextDouble();
        System.out.println(supplier.get());
        supplier=Math::random;
        System.out.println(supplier.get());

三,Predicate 接口

判断型 执行test() 方法做判断,用于判断是否满足条件,过滤数据;如ArrayList的removeIf(Predicate<? super E> filter)和

Optional 的 public Optional<T> filter(Predicate<? super T> predicate)方法

实例一

 //Predicate  d->d.getTypeId()==3的作用就是 对方法传入参数d,然后返回d.getTypeId()==3的值
      
boolean is=Optional.ofNullable(email).filter(d->d.getTypeId()==3).isPresent(); 

boolean is1=Optional.ofNullable(email).filter(new Predicate<EmailBean>() {
            @Override
            public boolean test(EmailBean email) {
                return email.getTypeId()==3;
            }
        }).isPresent();

实例二

List<String> list = Arrays.asList("aa","bb","cc");
list.removeIf(item->item.startsWith("a"));

四,Function 接口,

转换作用,将输入数据转换成另一种形式的数据并返回。用于需要处理某些数据的场景。

实例一
//optional源码
   public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
        Objects.requireNonNull(mapper);
        if (!isPresent())
            return empty();
        else {
            return Optional.ofNullable(mapper.apply(value));
        }
    }

//使用
 String title= Optional.ofNullable(email).map(d->d.getTitle()).orElse("默认名称");

String title1=Optional.ofNullable(email).flatMap(d->Optional.ofNullable(d.getTitle())).orElse("默认名称");


实例二
//将字符串倒序
  Function<String,String> function2=new Function<String,String>(){
            @Override
            public String apply(String str) {
                String result = "";
                for (int i = str.length() - 1; i >= 0; i--) {
                    result += str.charAt(i);
                }
                return result;
            }
        };

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值