java1.8 Lambda函数式编程

Lambda 函数式编程

lambda表达式是一段可以传递的代码,它的核心思想是将面向对象中的传递数据变成传递行为。

在java8之前我们如果需要使用Runnable新建一个线程的时候我们需要进行这样的操作

Runnable r = new Runnable() {
    @Override
    public void run() {
        System.out.println("do something.");      
    }
}

使用lambda我们可以节省很多定义的操作.一行代码搞定,至少这样看起来是很爽的.

Runnable r = () -> System.out.println("do something.");

lambda表达式的基本规则

expression = (variable) -> action

其中variable为变量非必选字段

我们可以自己写个函数式接口

public class FunctionTest {

    @FunctionalInterface
    interface Predicate<T> {
        boolean test(T t);
    }
    
    public static boolean doPredicate(int age, Predicate<Integer> predicate) {
            return predicate.test(age);
    }

    public static void main(String[] args) {
        boolean isAdult = doPredicate(20, x -> x >= 18);
        System.out.println(isAdult);
    }
}

这是FunctionalInterface注释的一部分

An informative annotation type used to indicate that an interface type declaration is intended to be a functional interface as defined by the Java Language Specification.
一种信息性注释类型,用于指示接口类型声明是由Java语言规范定义的功能接口

lambda内置函数式接口:

  1. Consumer 消费性接口 只接收数据,并没有返回值
  2. Supplier 供给型接口 没有参数,但是可以返回数据
  3. Function 函数型接口 既能输入数据,又能返回结果的方法
  4. Predicate 断言型接口 根据条件返回boolean
public class StreamDemo {

    public static void main(String[] args) {

            // 供给型接口
            List<Double> list = supply(10,() -> Math.random()*100);
            // 消费性接口
            list.forEach(System.out::println);
            // 断言型接口
            List<Double> list1 = list.stream().filter(x -> x%2 == 0).collect(Collectors.toList());
            list1.forEach(System.out::println);
            // 函数型接口
            List<Double> list2 = list.stream().map(x -> x*2).collect(Collectors.toList());
    }

    public static List<Double> supply(Integer num, Supplier<Double> supplier){
        List<Double> resultList = new ArrayList<>();
        for(int x=0;x<num;x++) {
            resultList.add(supplier.get());
        }
        return resultList ;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值