Java8 Stream 使用

流的创建 空流 如果创建空流,则应使用 Stream.empty() 方法。 通常情况下创建空流的目的是避免返回 null: public Stream<String> streamOf(List<String> list) { return list == null || list.isEmpty() ? Stream.empty() : list.stream(); } 从数组或集合创建流 我们...

November 18, 2018 · 7 min · Zeral

面试整理

Java 面试问题整理 Java 程序如何做到一次编写,到处运行 java 代码源文件经过 javac 编译期编译为 .class 文件,.class 文件不包含处理器本机代码,而是包含字节码 - JVM 的机器语言。启动器使用虚拟机运行程序。 由于 JVM 可在许多不同的操作系统上使用,因此相同的 .class 文件可以在不同系统上运行。 JDK 和 JRE 的区别 JRE(Java Runtime Environment) 是 JVM 执行代码的基础。JDK 是 Java 程序开发所有特性的工具,包含JRE,编译,开发和调试工具。 JVM 内存结构 什么是按值传递,什么是引用传递,Java 中是值传递还是引用传递 值传递:传递到方法中的形参值只是实参值的一个副本,对形参的修改不会影响之前的值; 引用传递:形参只是实参的别名。它指向真正的实参,对形参所做的任意修改都反映在实参中。 Java中都是值传递,基本类型值传递,对象类型是引用值传递,也就是说值的内容是对象的引用。 详见:https://www.zhihu.com/question/31203609 ...

November 8, 2018 · 25 min · Zeral

使用 Java8 修复代码烂味道

在学习 Java8 时发现一些写法真的很优秀,用了就有种回不去的感觉,很好的处理了 Java 代码上的烂味道。 匿名内部类 在任何使用内部类的地方都使用 lamdba表达式 进行重构,比如: list.sort(new Comparator<String>() { public int compare (String o1, String o2) { return o1.length() - o2.length(); } }); 可以更简洁的写成: list.sort((o1,o2) -> o1.length() - o2.length()); ...

December 30, 2017 · 2 min · Zeral

Java8 Stream 学习

Java 8 提供了一个新的 API(称为”流“,Stream),它支持大数据的并行操作,其思路和在数据库查询语言中的思路相似 – 用更高级的方式表达想要的东西,而由”实现“(在这里是 Streams 库)来选择最佳低级执行机制。这样就可以避免用 synchronized 来编写代码,这一行代码不仅容器出错,而且在多核 CPU 上执行所需的成本比想象要高1。 思想 是函数式编程(functional programming)的一种 Java 实现 强调将计算过程分解成可复用的函数,主要使用 map 方法和 reduce 方法组合而成的 MapReduce 算法,最好的实现 Apache Hadoop ...

December 5, 2017 · 9 min · Zeral