![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java8
成都超平面科技
致力于研究和分享平面设计软件中的二次开发技术,助力广告、印刷行业实现自动化生产。
展开
-
Java8-高阶函数及判断高阶函数的方式
什么是高阶函数高阶函数是指接受另外一个函数作为参数,或返回一个函数的函数。什么样的参数是函数类型的参数?要看该参数是否是一个函数式接口,函数式接口只会有一个方法,会使用 @FunctionalInterface 这个注解来修饰。高阶函数在 Java8 中很常见,如以下的例子:Stream<Integer> numUp = Stream.of(1, 2, 5).map(n...原创 2018-09-14 09:13:33 · 5297 阅读 · 0 评论 -
Java8 - 对流(数据)进行自定义分块:partitioningBy收集器
partitioningBy收集器在JDK8中,可以对流进行方便的自定义分块,通常是根据某种过滤条件将流一分为二。例如:有一组人名,包含中文和英文,在 JDK8 中可以通过 partitioningBy 收集器将其区分开来。下面是代码例子:// 创建一个包含人名称的流(英文名和中文名)Stream<String> stream = Stream.of("Alen", "H...原创 2018-10-15 09:15:11 · 4019 阅读 · 0 评论 -
Java8 - 对流(数据)进行自定义分组:groupingBy收集器
groupingBy收集器在JDK8中,可以对流进行方便的自定义分组,就像 SQL 语句中的 groupBy 一样,在JDK8中对应的分组函数是 Collectors 类的 groupingBy 方法。这种特性很有用:把数据拆分成不同的组,可以使处理数据更加灵活方便,在某些情况下例如按需处理、分块处理时更高效。例如:有一组人名,需要根据首字母(姓氏)进行分组,则可以通过 groupingB...原创 2018-10-15 09:13:39 · 6435 阅读 · 0 评论 -
Java8 - Map更优雅的迭代方式:forEach
BiConsumer用于两个参数之间进行操作的函数式接口是 BiConsumer。这个函数式接口正好用来操作 Map 的 key 和 value。JDK8强化了针对 Map 类的迭代方式,新增了一个默认方法 forEach,它接收一个 BiConsumer 函数。...原创 2018-10-15 09:12:32 · 120300 阅读 · 9 评论 -
Java8 - Map新增的方法:computeIfAbsent
computeIfAbsent这个方法是JDK8中Map类新增的一个方法,用来实现当一个KEY的值缺失的时候,使用给定的映射函数重新计算填充KEY的值并返回结果。computeIfAbsent 方法的JDK源码如下:default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) ...原创 2018-10-15 09:11:15 · 2271 阅读 · 0 评论 -
Java8 - 定制归一化收集器(reducing)得到自定义结果集
reducing简介reducing 是一个收集器(操作),从字面意义上可以理解为“减少操作”:输入多个元素,在一定的操作后,元素减少。reducing 有多个重载方法,其中一个方法如下:public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T&gt原创 2018-09-26 16:38:20 · 12973 阅读 · 5 评论 -
Java8-ThreadLocal的Lambda构造方式:withInitial
ThreadLocal的Lambda构造方式Java8中ThreadLocal对象提供了一个Lambda构造方式,实现了非常简洁的构造方法:withInitial。这个方法采用Lambda方式传入实现了 Supplier 函数接口的参数。写法如下:代码实例/** * 当前余额 */private ThreadLocal<Integer> balance = T...原创 2018-09-14 09:12:53 · 21270 阅读 · 0 评论 -
Java8-转为流为基本数据类型求最大值、最小值、平均值、求和、计数
基本数据类型在高阶函数中的运用众所周知,在Java中使用基本数据类型的性能和产效率远高于包装类型。由于装箱类型是对象,因此在内存中存在额外开销。比如,整型在内存中占用4 字节,整型对象却要占用 16 字节。这一情况在数组上更加严重,整型数组中的每个元素只占用基本类型的内存,而整型对象数组中,每个元素都是内存中的一个指针,指向 Java堆中的某个对象。在最坏的情况下,同样大小的数组, Integ...原创 2018-09-14 09:13:07 · 8952 阅读 · 0 评论 -
Java8-惰性求值
什么是惰性求值(惰性计算)惰性求值也叫惰性计算、延迟求职,在函数式编程语言中随处可见。可以这样通俗地理解为:不对给出的表达式立即计算并返回值,而是在这个值需要被用到的时候才会计算。这个是个人理解,有关专业的术语定义请参考百度百科:https://baike.baidu.com/item/惰性计算什么是及早求值(热情求值)和惰性求值相反的是及早求值(热情求值),这是在大多数编程语言中...原创 2018-09-14 09:13:16 · 2256 阅读 · 0 评论 -
Java8-Lambda表达式的5种形式
形式一:这种写法没有参数,用一对圆括号表示。Runnable noArguments = () -> System.out.println("Hello World");形式二:这种写法只有1个参数,可以省略括号,下面的 event 相当于 (event)。ActionListener oneArgument = event -> System.out....原创 2018-09-14 09:13:23 · 3045 阅读 · 0 评论 -
Java8 - 更优雅的字符串连接(join)收集器 Collectors.joining
Java8中的字符串连接收集器在JDK8中,可以采用函数式编程(使用 Collectors.joining 收集器)的方式对字符串进行更优雅的连接。Collectors.joining 收集器 支持灵活的参数配置,可以指定字符串连接时的 分隔符,前缀 和 后缀 字符串。代码参考如下:// 定义人名数组final String[] names = {"Zebe", "Hebe", "Ma...原创 2018-10-15 09:16:07 · 57010 阅读 · 5 评论