Java8新特性:Lambda四大核心接口使用和简介

Function<T,R>接口

Function接口是对接受一个T类型参数,返回R类型的结果的方法的抽象,通过调用apply方法执行内容。

代码示例

 /**
     * Function<T, R> 函数型接口:
     */
    @Test
    public void testLambda() {
        //字符串处理
        String newStr = strHandler("\t\t\t 测试数据去空格   ", (str) -> str.trim());
        System.out.println(newStr);
        String subStr = strHandler("测试截取字符串", (str) -> str.substring(2, str.length()));
        System.out.println(subStr);
        String joinStr = strHandler("拼接", str -> str + "字符串");
        System.out.println(joinStr);
        //int数据处理
        Integer i1 = intHandler(10, i -> i * i);
        //求平方
        System.out.println("求平方:" + i1);
        //求和
        Integer sum = intHandler(10, i -> i + i);
        System.out.println("求和:" + sum);
    }

    //需求:用于处理字符串
    public String strHandler(String str, Function<String, String> fun) {
        return fun.apply(str);
    }

    //需求:用于处理int数据
    public Integer intHandler(Integer i, Function<Integer, Integer> fun) {
        return fun.apply(i);
    }
Consumer 接口

Consumer 接口翻译过来就是消费者,顾名思义,该接口对应的方法类型为接收一个参数,没有返回值, 可以通俗的理解成将这个参数’消费掉了’,一般来说使用Consumer接口往往伴随着一些期望状态的改变或者事件的发生,例如最典型的forEach就是使用的Consumer接口,虽然没有任何的返回值,但是却向控制台输出了语句。 Consumer 使用accept对参数执行行为

代码示例

 //Consumer<T> 消费型接口 :
    @Test
    public void testLambda2() {
        happy(10000, m -> System.out.println("买东西消费:" + m + "元"));
    }

    public void happy(double money, Consumer<Double> con) {
        con.accept(money);
    }
Supplier 接口

Supplier 接口翻译过来就是提供者,和消费者相反,该接口对应的方法类型为不接受参数,但是提供一个返回值,通俗的理解为这种接口是无私的奉献者,不仅不要参数,还返回一个值,使用get()方法获得这个返回值

代码示例

   //Supplier<T> 供给型接口 :
    @Test
    public void testLambda3() {
        //生成10个100以内的随机数
        List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
        //打印
        numList.stream().forEach(System.out::println);
    }

    //需求:产生指定个数的整数,并放入集合中
    public List<Integer> getNumList(int num, Supplier<Integer> sup) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            //提供
            Integer n = sup.get();
            list.add(n);
        }

        return list;
    }
Predicate 接口

predicate<T,Boolean> 断言接口,该接口对应的方法为接收一个参数,返回一个Boolean类型值,多用于判断与过滤,当然你可以把他理解成特殊的Funcation<T,R>,但是为了便于区分语义,还是单独的划了一个接口,使用test()方法执行这段行为

代码示例

 @Test
    public void testLambda4() {
        //Predicate<T> 断言型接口:
        List<String> list = Arrays.asList("Hello", "aaa", "Lambda", "bbb", "cc");
        List<String> filterStr = filterStr(list, s -> s.length() >= 3);
        //打印
        filterStr.stream().forEach(System.out::println);
    }

    //需求:将满足条件的字符串,放入集合中
    public List<String> filterStr(List<String> list, Predicate<String> pre) {
        //非空判断
        List<String> strList = Optional.ofNullable(list).orElseGet(ArrayList::new)
                //创建串行流
                .stream()
                //过滤
                .filter(s -> pre.test(s))
                //返回
                .collect(Collectors.toList());
        return strList;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8引入了Function接口Lambda表达式,这些新特性使得函数式编程变得更加容易和灵活。 Function接口是一个函数式接口,它定义了一个接受一个参数并返回一个结果的函数。它有一个抽象方法apply(),这个方法接受一个参数并返回一个结果。Function接口有多个默认方法可以组合成复杂的函数链,比如andThen()和compose()方法。 Lambda表达式是一种可以代替匿名内部类的语法,它可以用来创建函数式接口的实例。Lambda表达式由三个部分组成:参数列表、箭头符号和方法体。Lambda表达式的参数列表和方法体可以根据上下文自动推断,这使得代码更加简洁易读。 下面是一个使用Function和Lambda表达式的示例代码: ``` Function<Integer, Integer> square = x -> x * x; int result = square.apply(5); // result = 25 ``` 这个代码定义了一个Function接口的实例square,它接受一个整数参数并返回它的平方。然后我们可以调用这个实例的apply()方法来计算5的平方,结果为25。 Lambda表达式可以用来代替匿名内部类,使得代码更加简洁易读。比如下面这个代码: ``` Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, world!"); } }; ``` 可以使用Lambda表达式来简化为: ``` Runnable runnable = () -> System.out.println("Hello, world!"); ``` 这个代码定义了一个Runnable接口的实例runnable,它的run()方法会输出一条消息。Lambda表达式的箭头符号左侧没有参数,因为run()方法不接受任何参数。箭头符号右侧的方法体只有一条语句,因此可以省略大括号和分号。 总之,Java 8的Function和Lambda表达式为函数式编程带来了更加灵活和易用的工具,使得Java程序员可以更加方便地编写函数式风格的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值