函数式编程与Lambda表达式

函数式编程

函数式编程思想:只要能获取结果,谁做的,怎么做的,均无需知道,也不必知道,重视结果,不重视过程;eg:(你想吃炸鸡,只需美团下单,至于饭店如何炸的鸡,骑手如何送的,你均不需要知道,只需要美团下单,等待吃炸鸡)


Lambda表达式

  • Lambda表达式是函数式编程思想的一种体现
  • Lambda表达式由三部分组成:
    1、 一些参数构成
    2、->
    3、 一段代码
  • 函数式编程接口的抽象方法都只有一个

Lambda表达式的标准格式

(参数类型,参数)->{代码段};


Lambda表达式的格式说明

  • 参数和传统参数一致,无参数有空,多个参数用分号隔开;
  • ->表示指向动作;
  • 代码段和传统代码段一致;

Lambda表达式的特殊形式
  • (参数列表):数据类型可以省略不写
  • (参数列表):参数只有一个时()和参数类型都可不写
  • (代码块):如果只有一行代码(return,{}、;)均可不写但注意必须一块省略;

普通代码与Lambda表达式的代码对比

public class Demo01 {
    public static void main(String[] args) {
        //普通代码
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"新线程创建");
            }
        }).start();

        //Lambda表达式
        new Thread(()-> System.out.println(Thread.currentThread().getName()+"新线程创建")).start();
    }
}



常用的函数式接口(Java.util.function提供)

Supplier接口

Supplier接口仅包含一个无参的方法:T get()。用来获取参数指定类型的对象数据,
Supplier生产型接口,Supplier接口中泛类型是啥类型,get()方法返回啥类型
代码展示

public class Demo02 {
    public static void main(String[] args) {
        String str=getString(()->"胡歌");
        System.out.println(str);
    }
    public static String getString(Supplier<String> sup){
        return sup.get();
    }
}

Consumer接口

Consumer接口消费型接口,意为消费一个指定泛型的数据,包含 void accept(T)
代码展示

public class demo03 {

    public static void main(String[] args) {
        String str="胡歌";
        method(str,(str1)-> System.out.println(str));
    }
    public static void method(String str,Consumer<String> cn)
    {
        cn.accept(str);
    }

}

Predicate接口

Predicate接口中包含一个抽象方法:boolean test(T t),其中默认的方法有 and 、or
代码展示

public class demo04 {
    public static void main(String[] args) {

        method("afafaf",(str)->{
            if(str.length()>5){
                return true;
            }
            return false;
        });
    }
    public static void method(String str, Predicate<String> pr)
    {
        boolean test = pr.test(str);
        System.out.println("这个字符长吗:"+test);

    }
}

Function接口

Function接口根据一个类型的数据得到另一个类型的数据,前者为前置条件,后者为后置条件主要抽象方法 R
apply(T t)默认方法andThen();


以上四个接口主要用于Stream流的方法中

  • Consumer接口用于Stream流中的forEach()方法
  • predicate接口用于Stream流中的filter()方法
  • Function接口用于Stream流中的map()方法
public class demo01 {
    public static void main(String[] args) {
        Stream<String> stream   = Stream.of("1", "2", "3", "4");
        Stream<String> stream2 = Stream.of("5", "8");
        //Stream的forEach方法,打印
        //stream.forEach(str-> System.out.println(str));
        //Stream的filter,过滤
        //Stream<String> stream1 = stream.filter(str -> str.length() == 3);
        //stream1.forEach(str-> System.out.println(str));
        //Stream的map方法,映射
        //Stream<Integer> stream1 = stream.map(str -> Integer.parseInt(str));
        //stream1.forEach(str-> System.out.println(str));
        //System.out.println(stream.count());,计数
        //Stream<String> stream1 = stream.limit(3);
        //Stream<String> stream1 = stream.skip(2)
        Stream<String> stream3 = Stream.concat(stream, stream2);
        stream3.forEach(str-> Syst`em.out.println(str));



    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值