Java函数式编程快速入门(五)

本文深入探讨Java8的四大核心特性:函数一等公民、Lambda表达式、函数式接口及Stream流,通过代码示例展示如何利用这些特性提高代码效率与可读性。
基本概念:

1、函数一等公民

  • 好比Java其他数据类型,函数可以作为数据返回,也可以作为数据传参

2、Lambda表达式

  • Java 8 引入的新特性,描述的是一个函数,基本语法: (parameters) ->{ statements; }
  • 特定情况参数parameters,{} 可以省略。 左边是参数,右边是函数方法,->是连接符号
  • 方法引用,即高级语法:String::equals 简单理解就是类::实例方法
  • 多使用在匿名类,只有一个方法的接口,函数式接口,配合Stream流API使用

3、函数式接口

  • 注解了@FunctionalInterface的接口,只有一个方法
  • Java 8 内置了多种函数式接口常见的如:Function、Predicate、Supplier、Consumer,也支持自定义函数接口
  • 配合Lambda语法定义接口,通过调用方法名执行表达式。

4、Stream流

  • 初期看来很难理解,但是实际运用后确实这个词很精辟。
  • 数据流化后可以进行一系列的行为操作比如:过滤、排序、改变值,最后进行终止操作比如:循环输出、汇总、收集到容器
  • 流配合Java 8 提供的API加上Lambda表达式使得代码十分简洁
示例
package test;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Test3 {
    public static void main(String[] args){
    //流+lambda示例
        List<Integer> list = Arrays.asList(5, 2, 3, 3, 2);
        //去重
        List<Integer> resultprimes = list.stream().distinct().collect(Collectors.toList());
        //降序,循环加1,输出
        list.stream().sorted(Comparator.reverseOrder()).map((x)->x+1).forEach(System.out::println);
        //汇总
        Integer result = resultprimes.stream().reduce((a,b)->a+b).get();
        System.out.println(result);

    //匿名函数
        //旧
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Before Java8, too much code for too little to do");
            }
        }).start();
        //Lambda
        new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();

    //函数式接口
        //Function<T, R> 接收一个参数并返回结果的函数 R  apply(T t) 为其中的方法
        Function<String,Boolean> function = (String x)->x.equals("true");
        System.out.println(function.apply("1"));

    //只有一个方法的接口
        Myfunction myfunction = (x) -> x + "ccccc";
        System.out.println(myfunction.method("aaaaaabbbbb"));

    }

    //只有一个方法的接口
    interface Myfunction {
        String method(String a);
    }

}

Java 8 内置函数式接口参考:
https://blog.youkuaiyun.com/qq_29848473/article/details/79554472

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值