JDK8函数式编程进阶学习(1):基础语法学习

前言及常用的可以看这个:

Java8新特性学习-函数式编程(Stream/Function/Optional/Consumer)_icarusliu的专栏-CSDN博客_java 函数式编程

函数表达式的语法示例,我直接上代码,加上简单的说明:

package com.xiongzai.lambda;

import org.apache.commons.lang3.StringUtils;

import java.util.function.BinaryOperator;
import java.util.function.IntConsumer;
import java.util.function.Predicate;

public class basicGrammar {
    public static void main(String[] args) {
        /*写 StringUtils.join() 只是为了证明可以调用其他方法而已*/
        /*demo1 ()中没有参数,表示无参方法,返回类型为 void,也可使用大括号{}*/
        Runnable demo1 = () -> System.out.println(StringUtils.join("Hello", "World"));
        demo1 = () -> {
            System.out.println(StringUtils.join("Hello", "World"));
        };

        /*demo2 只有一行代码,一个参数 e,返回类型为 void,也可以是一段代码块,使用大括号{}将代码块括起来*/
        IntConsumer demo2 = e -> System.out.println(StringUtils.join("Hello", "World"));
        demo2 = e -> {
            System.out.println(StringUtils.join("Hello", "World"));
        };

        /*()中没有参数,表示无参方法,返回类型为 void,可以用返回或抛出异常来退出*/
        Runnable demo3 = () -> {
            System.out.println(StringUtils.join("Hello"));
            System.out.println(StringUtils.join("World"));
        };
        demo3 = () -> {
            int num = 1;
            if (num == 1) {
                System.out.println(StringUtils.join("Hello"));
                return;
            } else {
                try {
                    System.out.println(StringUtils.join("World"));
                } catch (Exception e) {
                    throw e;
                }
            }
        };

        /*demo4 并不是将两个数字相加,而是创建了一个函数,用来计算两个数字相加的结果,尽量别用这种方式,防止未知错误*/
        BinaryOperator<Long> demo4 = (x, y) -> x + y;

        /*demo5和demo4一样,只是用的显式声明参数类型,需要使用小括号将参数括起来*/
        BinaryOperator<Long> demo5 = (Long x, Long y) -> x + y;


        /*有返回值的*/

        /*请记住一句话:如果没有指定泛型,所有 Lambda 表达式中的参数类型都是由编译器推断得出的*/
        /*如下:xy都没指定变量类型,但是javac 根据 Lambda 表达式上下文信息就能推断出参数的正确类型*/
        Predicate<Integer> dispatcher = x -> x > 5;
        /*Predicate 接口的源码,接受一个对象,返回一个布尔值*/
        /*返回值就是 Lambda 表达式主体的值*/
//        public interface Predicate<T> {
//            boolean test(T t);
//        }
        /*该接口接受两个参数,返回一个 值,参数和值的类型均相同。实例中所用的类型是 Long*/
        BinaryOperator<Long> addLongs = (x, y) -> x + y;

        /*注意:类型推断系统相当智能,但若信息不够,类型推断系统也无能为力。类型系统不会漫无边 际地瞎猜,而会中止操作并报告编译错误,寻求帮助。*/
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值