分类:: Java8

Java8 - 更优雅的字符串连接(join)收集器 Collectors.joining

Java8中的字符串连接收集器在JDK8中,可以采用函数式编程(使用 Collectors.joining 收集器)的方式对字符串进行更优雅的连接。Collectors.joining 收集器 支持灵活的参数配置,可以指定字符串连接时的 分隔符,前缀 和 后缀 字符串。 代码参考如下: 1234567891011121314// 定义人名数组final String[] names =

Java8 - 对流(数据)进行自定义分块:partitioningBy收集器

partitioningBy收集器在JDK8中,可以对流进行方便的自定义分块,通常是根据某种过滤条件将流一分为二。 例如:有一组人名,包含中文和英文,在 JDK8 中可以通过 partitioningBy 收集器将其区分开来。 下面是代码例子:1234567891011121314151617// 创建一个包含人名称的流(英文名和中文名)Stream<String> stream

Java8 - 对流(数据)进行自定义分组:groupingBy收集器

groupingBy收集器在JDK8中,可以对流进行方便的自定义分组,就像 SQL 语句中的 groupBy 一样,在JDK8中对应的分组函数是 Collectors 类的 groupingBy 方法。这种特性很有用:把数据拆分成不同的组,可以使处理数据更加灵活方便,在某些情况下例如按需处理、分块处理时更高效。 例如:有一组人名,需要根据首字母(姓氏)进行分组,则可以通过 groupingBy

Java8 - Map更优雅的迭代方式:forEach

BiConsumer用于两个参数之间进行操作的函数式接口是 BiConsumer。这个函数式接口正好用来操作 Map 的 key 和 value。JDK8强化了针对 Map 类的迭代方式,新增了一个默认方法 forEach,它接收一个 BiConsumer 函数。JDK给出的描述如下: Performs the given action for each entry in this map u

Java8 - Map新增的方法:computeIfAbsent

computeIfAbsent这个方法是JDK8中Map类新增的一个方法,用来实现当一个KEY的值缺失的时候,使用给定的映射函数重新计算填充KEY的值并返回结果。computeIfAbsent 方法的JDK源码如下:1234567891011121314151617default V computeIfAbsent(K key, Function<? super K, ? extends

Java8 - 定制归一化收集器(reducing)得到自定义结果集

reducing简介reducing 是一个收集器(操作),从字面意义上可以理解为“减少操作”:输入多个元素,在一定的操作后,元素减少。 reducing 有多个重载方法,其中一个方法如下: 1public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op) 以上

Java8 - 转为流为基本数据类型求最大值、最小值、平均值、求和、计数

基本数据类型在高阶函数中的运用众所周知,在Java中使用基本数据类型的性能和产效率远高于包装类型。由于装箱类型是对象,因此在内存中存在额外开销。比如,整型在内存中占用4 字节,整型对象却要占用 16 字节。这一情况在数组上更加严重,整型数组中的每个元素只占用基本类型的内存,而整型对象数组中,每个元素都是内存中的一个指针,指向 Java堆中的某个对象。在最坏的情况下,同样大小的数组, Intege

Java8 - 高阶函数及判断高阶函数的方式

什么是高阶函数高阶函数是指接受另外一个函数作为参数,或返回一个函数的函数。什么样的参数是函数类型的参数?要看该参数是否是一个函数式接口,函数式接口只会有一个方法,会使用 @FunctionalInterface 这个注解来修饰。 高阶函数在 Java8 中很常见,如以下的例子: 1Stream<Integer> numUp = Stream.of(1, 2, 5).map(num -

Java8 - ThreadLocal的Lambda构造方式:withInitial

ThreadLocal的Lambda构造方式Java8中ThreadLocal对象提供了一个Lambda构造方式,实现了非常简洁的构造方法:withInitial。这个方法采用Lambda方式传入实现了 Supplier 函数接口的参数。写法如下: 代码实例1234/** * 当前余额 */private ThreadLocal<Integer> balance = ThreadLo

Java8 - 惰性求值

什么是惰性求值(惰性计算)惰性求值也叫惰性计算、延迟求职,在函数式编程语言中随处可见。可以这样通俗地理解为:不对给出的表达式立即计算并返回值,而是在这个值需要被用到的时候才会计算。这个是个人理解,有关专业的术语定义请参考百度百科:https://baike.baidu.com/item/惰性计算 什么是及早求值(热情求值)和惰性求值相反的是及早求值(热情求值),这是在大多数编程语言中随处可见的一

Java8 - Lambda表达式的5种形式

本文介绍Jave8中Lambda表达式的多种写法形式,一般有五种写法形式。 形式一:这种写法没有参数,用一对圆括号表示。1Runnable noArguments = () -> System.out.println("Hello World"); 形式二:这种写法只有1个参数,可以省略括号,下面的 event 相当于 (event)。123ActionListener oneArgumen

Java8 - 使用jdeps —— Java类依赖性分析器

jdeps,即“java dependencies” 的缩写,是Java8中提供的一个工具。 jdeps命令显示Java类文件的包级或类级依赖关系。输入类可以是.class文件、目录、jar文件的路径名,或者可以是完全限定的类名称,以分析所有类文件。jdeps的参数选项决定了输出的内容。默认情况下,JDEPS将依赖关系输出到系统输出(控制台)。它可以用DOT语言生成依赖关系(见 -dotoutpu