Java8:Lambda表达式,函数式编程,Stream(流),简单学习

小白近期简单学习了一下Java8的几个新特性,主要是Lambda表达式,函数式编程,Stream(流),现将学习的一些简单的语句记录下来,如有机会也可以帮助想简单了解这类知识的人。

话不多说,直接上代码(包含简单讲解)

public class LmdTest {

    public static void main(String[] args) {
        /*
         * 一:Lambda,总的来说,只要是一个接口中只有一个抽象方法的,都可以实现lambda表达式
         */
        // Lmd简单调用,并返回参数
        LmdString lmdStr = name -> "name:" + name;
        System.out.println(lmdStr.rtnName("小白"));

        //Lmd数字运算 +
        LmdMath lmdMt1 = (numA, numB) -> numA + numB;
        System.out.println("numA + numB:" + lmdMt1.math(3,3));

        //Lmd数字运算 -
        LmdMath lmdMt2 = (numA, numB) -> numA - numB;
        System.out.println("numA - numB:" + lmdMt2.math(3,3));

        //Lmd数字运算 *
        LmdMath lmdMt3 = (numA, numB) -> numA * numB;
        System.out.println("numA * numB:" + lmdMt3.math(3,3));

        //Lmd数字运算 /
        LmdMath lmdMt4 = (numA, numB) -> numA / numB;
        System.out.println("numA / numB:" + lmdMt4.math(3,3));
        /*
         * 二:函数式编程
         */
        // JDK 1.8 新增加的函数接口:java.util.function,它包含了很多类来支持Java的函数式编程
        BiFunction<String,String,String> rtnHel = (a,b) ->  a + b;
        System.out.println(rtnHel.apply("Hi:","小白"));

        Function<String,String> rtnHel1 = (a) ->  a + "-1-";
        Function<String,String> rtnHel2 = (a) ->  a + "-2-";
        // 函数式接口中,andThen与compose的区别
        System.out.println("andThen:" + rtnHel1.andThen(rtnHel2).apply("xiao"));
        System.out.println("compose:" + rtnHel1.compose(rtnHel2).apply("xiao"));

        /*
         * 三:Stream(流)
         */

        Random random = new Random();
        int org = 0, bound = 10;
        // Stream 简单用法
        random.ints(org,bound).limit(10).forEach(System.out::println);
        // Stream 复杂用法 + 解释
        List<Integer> list = random.ints(org,bound) // 生成大于org,小于bound的数字流
                .limit(10) // 限制数量,不然会一直生成
                .filter(num -> num <= 5) // 过滤,需要小于等于5
                .map(num -> num + 10) // 过滤后的数字都加1
                .boxed() // 转换为对象流
                .collect(Collectors.toList()); // 转为List
        System.out.println(list);
    }

    interface LmdString {
        //Lambda表达式调用的方法
        String rtnName(String name);

    }

    interface LmdMath {
        //Lambda表达式调用的方法
        int math(int numA, int numB);

    }

}

运行结果分别为:

name:小白
numA + numB:6
numA - numB:0
numA * numB:9
numA / numB:1
Hi:小白
andThen:xiao-1--2-
compose:xiao-2--1-
5
7
6
9
6
9
7
8
7
7
[15, 12, 12, 11, 15, 11, 10]

Process finished with exit code 0

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值