java8 新特性 - 函数式接口

本文介绍了Java8中的函数式接口概念,强调其有且仅有一个抽象方法的特性。函数式接口能够被转换为Lambda表达式或方法引用。文章提到了Java内置的四大核心函数式接口,并鼓励通过代码练习来深入掌握这一特性。
部署运行你感兴趣的模型镜像

 函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数式接口可以被隐式转换为 lambda 表达式。

Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。

@FunctionalInterface 注解作用检验是否是函数式接口

 

代码练习

package com.sgl.lambda;

/**
 * 自定义函数式接口
 *
 *@FunctionalInterface 注解作用检验是否是函数式接口
 *
 * 只包含一个抽象方法的接口 ,但是可以有多个非抽象方法的接口。
 *
 * @author not_simple
 * @version 1.0
 * @date 2020/5/21 17:33
 */
@FunctionalInterface
public interface MyInterface {

    //只包含一个抽象方法的接口 ,但是可以有多个非抽象方法的接口。
    void method1();

//    void method2();

    default void say(){
        System.out.println("11");
    };
}

 

 

java 内置的四大核心函数式接口

消费型接口Consumer<T>  void accept(T t)   有参数 无返回
供给型接口Supplier<T>  T  get()           无参数  有返回
函数型接口Function<T,R>  R apply(T t)     有参数  有返回
断定型接口Predicate<T>  boolean  test(T t)  有参数  返回Boolean值

其他函数式接口

https://www.runoob.com/java/java8-functional-interfaces.html

 

代码练习

package com.sgl.lambda;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * java 内置的四大核心函数式接口
 *
 * 消费型接口Consumer<T>  void accept(T t)   有参数 无返回
 *
 * 供给型接口Supplier<T>  T  get()           无参数  有返回
 *
 * 函数型接口Function<T,R>  R apply(T t)     有参数  有返回
 *
 * 断定型接口Predicate<T>  boolean  test(T t)  有参数  返回Boolean值
 *
 * @author not_simple
 * @version 1.0
 * @date 2020/5/21 17:31
 */
public class FunctionInterface {
//    消费型接口Consumer<T>  void accept(T t)   有参数 无返回
    @Test
    public  void test1(){
        happyTime(500, new Consumer<Double>() {
            @Override
            public void accept(Double aDouble) {
                System.out.println("今年已经学习了:"+aDouble+"年了");
            }
        });
        System.out.println("****************************************************************");
        //    消费型接口Consumer<T>  void accept(T t)   有参数 无返回
        happyTime(100,year ->   System.out.println("今年已经学习了:"+year+"年了"));
    }

    private void happyTime(double i, Consumer<Double> con) {
        con.accept(i);
    }


//    断定型接口Predicate<T>  boolean  test(T t)  有参数  返回Boolean值
    @Test
    public void test2 (){
        List<String> list = Arrays.asList("北京", "天津", "南京", "东京", "西京");
        List<String> list1 = filterString(list, new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.contains("京");
            }
        });
        System.out.println(list1);
        System.out.println("********************");
        //断定型接口Predicate<T>  boolean  test(T t)  有参数  返回Boolean值
        List<String> list2 = filterString(list, s -> s.contains(s));
        System.out.println(list2);
    }

    //根据给定的规则,过滤集合中的字符串。此规则有Predicate的方法决定
    public List<String> filterString(List<String> list, Predicate<String> pre){
        ArrayList<String> filterList =new ArrayList<>();
        for (String s : list){
            if (pre.test(s)){
                filterList.add(s);
            }
        }

        return filterList;
    }
}

 

 

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值