函数式编程

概念:

面向对象思想需要关注用什么对象完成什么事情。而函数式编程思想就类似于我们数学中的函数。它主要关注的是对数据进行了什么操作。

Lambda表达式

Lambda是JDK8中一个语法糖。

他可以对匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注什么是对象,而是更关注我们对数据做了什么操作。

核心原则:可推导可省略

如果参数的类型可以被推导出来,则参数类型可以省略

基本格式:(参数列表)->{代码}

Stream流

它可以被用来对集合或数组进行链状流式的操作。可以帮方、便的让我对集合或者数组操作。

创建流对象

List<Author> authors = getAuthors();
authors.stream()
        .distinct()
        .filter(author -> author.getAge()>18)
        .forEach(author -> System.out.println(author.getName()));
Integer[]integers ={1,2,3,4,5,6,7,8};
Stream<Integer> stream = Arrays.stream(integers);
stream.distinct()
        .filter(new Predicate<Integer>() {
            @Override
            public boolean test(Integer integer) {
                return integer>5;
            }
        })
        .forEach(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println(integer);
            }
        });
Map<String,String>maps=new HashMap<String,String>();
// entrtSet把键值对封装为一个单列集合
Stream<Map.Entry<String, String>> stream1 = maps.entrySet().stream();

stream1.forEach(new Consumer<Map.Entry<String, String>>() {
    @Override
    public void accept(Map.Entry<String, String> stringStringEntry) {
        System.out.println(stringStringEntry.getKey());
    }
});

注意事项:

  • 惰性求值(如果没有终结操作),那么中间操作是不会得到执行的
  • 流是一次性的(一旦一个流对象经过一个终结操作后,这个流就不能再被使用)
  • 不会影响原来数据(我们在流中可以对数据做很多处理。但是正常情况下是不会影响原来集合中的元素的,这往往也是我们期待的)

不创建流对象,每个流对象只可以使用一次

在每次使用流时,直接stream()

List<Author> authors = getAuthors();
authors.forEach(System.out::println);
authors.stream().flatMap(author -> author.getBooks().stream()).forEach(System.out::println);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值