本来只是像了解下Lambda表达式,发现是属于Java8的特性,干脆都了解一下吧(emmm这么没有计划性感觉快找不到工作了,淦...)
本文是https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/What's%20New%20in%20JDK8/Java8Tutorial.md
的阅读笔记
1.接口的默认方法
原先接口里是不能存在非抽象方法的,升级到Java8以后,就可以在接口中添加默认方法了,只用使用一个 default 关键字。比如下图中的hunger方法(啊我是真的饿了),此方法又叫虚拟拓展方法。
2.Lambda表达式
如果要应用上图的接口,Java8之前的写法是怎么样的?得先搞个类实现一下吧,假如这个类我们只用一次,那就搞个匿名类行了吧。大概就这样。
看上图会发现真正有用的代码就一句(吃肉那个),但是要写这么多其他格式化的语句,明显减小了可读性呀,而且不够简洁嘛。有没有什么方法阔以简洁明了呢?
这么看是不是简洁明了多了,其实还阔以更简单,这里有用的语句只有一句,这种情况下可以把大括号去掉(是的,这玩意的目的是写代码块的,如果那有用的是return语句也可以,去掉return关键字。)。
简单多了吧,效果一样好使,如果工资是按行算的话还是不推荐这种写法的(滑稽)。
这么优雅的写法是不是想运用在所有的匿名类的写法上呀?
那么问题来了,所有的接口(是的抽象类不阔以的)都可以用Lambda表达式嘛?
3.函数式接口
啥叫函数式接口呢,简单的说就是接口里只有一个抽象方法。只有这样的接口才可以用lambda表达式。像这样的接口可以被隐式转换为Lambda表达式(比如与)。这里还有一种注解@FunctionalInterface,它会告诉编译器这个接口是一个函数式接口,一旦多于一个抽象方法便会报错(当然这个注解不是必须的)。
4.方法和构造函数引用
就是::关键字的应用,使用::关键字通过一个函数式接口调用某个类的方法或者构造器。
首先我们创建一个函数式接口
引用一个类的静态方法
再引用一个对象方法
接口还是之前那个接口
最后让我再康康怎么引用构造方法创建一个对象:
首先我们建两个类
然后写一个造对象的工厂
然后我们使用神奇的::关键字,利用构造函数把它们关联起来。
李大锤 class javasereview.BoyFriend
5.内置接口
5.1.Predicate接口:Predicate 接口是只有一个参数的返回布尔类型值的 断言型 接口。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)
5.2.Function接口:Function 接口接受一个参数并生成结果。默认方法可用于将多个函数链接在一起(compose, andThen)

5.3.Suppliers接口:
就是不接受参数返回指定的泛型类型对象的一个接口(如果是引用一个构造函数一个对象的话,那个类中必须含有空参构造器。)
5.4.Consumers接口:
该接口表示要对单个输入参数执行的操作
5.5.Comparators接口:
这个老接口增加了一些新的默认方法
5.6.Optionals接口:
6.Stream
就是能够对某组元素进行重复操作。这些操作分为中间操作和最终操作两种,最终操作返回某种特定类型的计算结果,而中间操作返回流,这样就可以对流进行多次操作了嘛(需要先指定一个数据源,比如 的子类,List 或者 Set, Map 不支持。)Stream 的操作可以串行执行或者并行执行。
可以用stream()或者parallelStream()
6.1.Filter(过滤)
中间操作,把满足条件的部分过滤出来。
6.2.Sorted(排序)
如果没有传入Comparator对象则会使用默认排序,这里我传了个匿名的。
6.3.Map(映射)
中间操作,map会将元素根据指定的Function接口来依此将元素转成另外的对象。
6.4.Match(匹配)
最终操作,返回一个boolean值,检测指定的Predicate是否匹配整个Stream。
6.5.Count(计数)
最终操作,返回Stream中元素的个数,返回值类型是long。
6.6.Reduce(约束)
最终操作,将多个元素约束成一个元素。
6.7.Parallel Streams(并行流)
就是把stream方法改成用parallelStream方法,并行嘛,就是快!
啊啊啊啊剩下的明天写,睡觉了晚安
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/9600.html