Java8
六月的尾巴
路漫漫其修远兮,吾将上下而求索
展开
-
getField()与getDeclaredField()的区别
Java的反射机制中,用Class的getField(String name)或getDelaredField(String name)可以得到目标类的指定属性,返回类型是Field。在看它们的区别之前先看下它们的源码:/** * Returns a {@code Field} object that reflects the specified public member * field of the class or interface represented by this {原创 2020-05-20 14:59:20 · 1652 阅读 · 0 评论 -
超越Java8
声明式编程”如何做”风格的编程非常适合经典的面向对象编程,有些时候我们也称之为“命令式”编程,因为它的特点是它的指令和计算机底层的词汇非常相近,比如赋值,条件分支以及循环,就像下面的这段代码:Transaction mostExpensive = transactions.get(0);if(mostExpensive == null){ throw new IllegalArgument...原创 2019-11-15 23:36:59 · 144 阅读 · 0 评论 -
Java8用流收集数据
归约和汇总统计总数利用收集器来统计菜单中有多少中菜:long howManyDishes = menu.stream().collect(Collectors.counting());查找流中的最大值和最小值可以使用两个收集器,Collectors.maxBy和Collectors.minBy,来计算流中的最大值和最小值。这两个收集器接收一个Comparator参数来比较流中的元素。可...原创 2019-10-20 12:41:42 · 125 阅读 · 0 评论 -
Java8数值流
数值流背景:当计算菜单的热量时,int calories = menu.stream().map(Dish::getCalories).reduce(0,Integer::sum);问题:上例中暗含了装箱的成本,每个Integer都必须拆箱成一个原始类型,再进行求和。解决方法:Java8中引入了三个原始类型特化流接口来解决这个问题:IntStream,DoubleStream和Lo...原创 2019-10-18 22:33:50 · 145 阅读 · 0 评论 -
Java8使用流
筛选和切片用谓词筛选Stream接口支持filter方法。该操作会接受一个谓词(一个返回boolean的函数)作为参数,并返回一个包括所有符合谓词的元素的流。例如筛选出菜单中所有的素菜,创建一张素食菜单:List<Dish> vegetarianMenu = menu.stream().filter(Dish::isVegetarian).collect(toList());...原创 2019-10-16 19:52:23 · 142 阅读 · 0 评论 -
Lambda表达式之方法引用
方法引用方法引用可以被看做仅仅调用特定方法的Lambda的一种快捷写法。它的基本思想是,如果一个Lambda代表的只是”直接调用这个方法“,那最好还是用名称来调用它,而不是去描述如何调用它。 事实上,方法引用就是让你根据已有的方法实现来创建Lambda表达式。但是,显式地指明方法的名称,你的代码可读性会更好。如何构建方法引用方法引用主要有三类:(1)指向静态方法的方法引用(例如Inte...原创 2019-10-13 14:47:19 · 495 阅读 · 0 评论 -
Java8中的默认方法
默认方法 Java8中加入默认方法主要是为了支持库设计师,让他们能够写出容易改进的接口。这一方法很重要,因为你会在接口中遇到越来越多的默认方法,但由于真正需要编写默认方法的程序员相对较少,而且它们只是有助于程序改进,而不是用于编写任何具体的程序。 两段Java8示例代码:List<Apple> heavyApples1 = inventory.stream().filter...原创 2019-10-12 22:42:52 · 178 阅读 · 0 评论