归档: 2018/9

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) 以上

(译)Java - null在内存中到底是什么

Java中随时都在使用 null,那么 null 到底是什么?让我们从一个简单的表达式说起: 1String x = null; 1. 这句话的确切含义是什么?回想什么是变量,什么是值。一个常见的隐喻是一个变量类似于一个盒子。就像你可以用一个盒子来存储东西一样,你可以使用变量来存储一个值。在声明变量时,我们需要设置变量的类型。 Java中有两大类类型:原始类型和引用类型。声明原始类型存储值的变量;

(译)Java - 数组的10个常用方法

以下是Java数组中最常用的10种方法,它们是 stackoverflow 中投票最多的问题。 0. 声明数组123String[] aArray = new String[5];String[] bArray = {"a","b","c", "d", "e"};String[] cArray = new String[]{"a","b","c","d","e"

Windows10“许可证即将过期”解决办法

试了很多激活工具、激活码都不行,本文介绍的这个激活方法截止到今日(2018年9月18日)是可行的,亲测通过。 第1步:以管理员模式打开命令提示符号(或者PowerShell)。第2步:在命令窗口中依次输入以下内容(加粗部分): slmgr.vbs /upk:稍等几秒钟,窗口会弹出“成功地卸载了产品密钥”。 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX:稍等几秒

Git多分支开发过程中处理冲突的经验教训

最近在项目开发中遇到一个问题,不同分支的代码产生大量冲突,导致合并麻烦。这也算是一个教训。值得记录下来反思。 不同分支代码的冲突问题已上线分支为 master,我负责的分支为 A,另外有人负责的分支是 B,恰恰因为项目需求的原因,A 和 B 分支上的某个类会被我们同时改动。由于master分支上线的缘故,第二天我需要在自己的A分支上去合并已上线分支master的代码。这时候,出现了问题:我的A分支

2018年9月18日

六点多自然醒来起床,然后去小区跑了接近3公里,边跑步边听我自己录制的政治选择题语音。已经有接近半年没有经常跑步运动了,体重从原来的53KG涨到现在的60KG,慢性咽炎也不见好转,感觉自己的身体素质在走下坡路。 反省自己,确实有很多自己想做的事情,都是三分钟热情,曾经强大的意志力变得很薄弱,总是没有办法把一件事情坚持做下去,反而是想做的事情很多,结果做成的很少。

2018年9月17日

今天回老家教育局去办理了专升本考试现场确认手续,下个月就要考试了。十年前,我在这座县城读高中,十年后,我回到这里报成人高考(专升本级别)。当年,直到如今,我唯一比较擅长的科目是英语 —— 虽然这十年来并没有实质性地提高,但还是有较大的把握在这次的专升本英语考试中,拿个及格分数。 惶然回首,要是当初多努力一点考一个本科,没有那么浪费靑春就好了。这十年里,要是我每天记住1个单词,到今天我的词汇量会额外

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