Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
沉默王二
Jmx Java
提交
2fc4aea9
J
Jmx Java
项目概览
沉默王二
/
Jmx Java
大约 1 年 前同步成功
通知
160
Star
18
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jmx Java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2fc4aea9
编写于
3月 30, 2023
作者:
沉默王二
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
重要知识点
上级
7fba4269
变更
25
展开全部
隐藏空白更改
内联
并排
Showing
25 changed file
with
73 addition
and
73 deletion
+73
-73
README.md
README.md
+2
-2
docs/basic-extra-meal/comparable-omparator.md
docs/basic-extra-meal/comparable-omparator.md
+1
-1
docs/basic-extra-meal/generic.md
docs/basic-extra-meal/generic.md
+2
-2
docs/basic-extra-meal/jdk9-char-byte-string.md
docs/basic-extra-meal/jdk9-char-byte-string.md
+2
-2
docs/collection/PriorityQueue.md
docs/collection/PriorityQueue.md
+2
-2
docs/collection/arraydeque.md
docs/collection/arraydeque.md
+2
-2
docs/collection/arraylist.md
docs/collection/arraylist.md
+2
-2
docs/collection/fail-fast.md
docs/collection/fail-fast.md
+1
-1
docs/collection/gailan.md
docs/collection/gailan.md
+3
-3
docs/collection/hashmap.md
docs/collection/hashmap.md
+2
-2
docs/collection/iterator-iterable.md
docs/collection/iterator-iterable.md
+1
-1
docs/collection/linkedhashmap.md
docs/collection/linkedhashmap.md
+2
-2
docs/collection/linkedlist.md
docs/collection/linkedlist.md
+2
-2
docs/collection/list-war-2.md
docs/collection/list-war-2.md
+1
-1
docs/collection/time-complexity.md
docs/collection/time-complexity.md
+2
-2
docs/collection/treemap.md
docs/collection/treemap.md
+2
-2
docs/home.md
docs/home.md
+2
-2
docs/io/file-path.md
docs/io/file-path.md
+2
-2
docs/io/shangtou.md
docs/io/shangtou.md
+3
-3
docs/java8/Lambda.md
docs/java8/Lambda.md
+10
-8
docs/java8/optional.md
docs/java8/optional.md
+13
-16
docs/java8/stream.md
docs/java8/stream.md
+11
-10
docs/string/immutable.md
docs/string/immutable.md
+2
-2
docs/string/intern.md
docs/string/intern.md
+1
-1
二哥的 Java 进阶之路.md
二哥的 Java 进阶之路.md
+0
-0
未找到文件。
README.md
浏览文件 @
2fc4aea9
...
...
@@ -157,7 +157,7 @@
## 集合框架(容器)
-
[
聊聊Java的集合框架
](
docs/collection/gailan.md
)
-
[
聊聊Java的集合框架
的构成(概览)
](
docs/collection/gailan.md
)
-
[
简单聊一下时间复杂度
](
docs/collection/time-complexity.md
)
-
[
Java ArrayList详解(附源码分析)
](
docs/collection/arraylist.md
)
-
[
Java LinkedList详解(附源码分析)
](
docs/collection/linkedlist.md
)
...
...
@@ -210,7 +210,7 @@
-
[
Java 8 Optional最佳指南
](
docs/java8/optional.md
)
-
[
深入浅出Java 8 Lambda表达式
](
docs/java8/Lambda.md
)
##
Java
重要知识点
## 重要知识点
-
[
Java命名规范
](
docs/basic-extra-meal/java-naming.md
)
-
[
彻底弄懂Java中的Unicode和UTF-8编码
](
docs/basic-extra-meal/java-unicode.md
)
...
...
docs/basic-extra-meal/comparable-omparator.md
浏览文件 @
2fc4aea9
---
title
:
Comparable和Comparator的区别
title
:
Java 中
Comparable和Comparator的区别
shortTitle
:
Comparable和Comparator
category
:
-
Java核心
...
...
docs/basic-extra-meal/generic.md
浏览文件 @
2fc4aea9
---
title
:
深入理解Java中的泛型
shortTitle
:
泛型
shortTitle
:
关于Java
泛型
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,泛型,java 泛型,java generic
---
# 6.6 泛型
# 6.6
关于Java
泛型
“二哥,为什么要设计泛型啊?”三妹开门见山地问。
...
...
docs/basic-extra-meal/jdk9-char-byte-string.md
浏览文件 @
2fc4aea9
---
title
:
Java 9为什么要将String的底层实现由char数组改成了byte数组?
shortTitle
:
String的底层实现由char改成了byte?
shortTitle
:
String的底层实现
为什么
由char改成了byte?
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java,string,char,byte,java string 底层实现,java字符串源码,java string char,java string byte,java string char byte,java
---
# 4.11
Java 9为什么要将String的底层实现由char数组改成了byte数组
?
# 4.11
String的底层实现为什么由char改成了byte
?
“二哥,最近在我阅读 Java 11 的字符串源码,发现和 Java 8 的有很大不同。”三妹的脸上洋溢着青春的微笑😊,甜美地说道:“String 类的源码已经由
`char[]`
优化为了
`byte[]`
来存储字符串内容,为什么要这样做呢?”
...
...
docs/collection/PriorityQueue.md
浏览文件 @
2fc4aea9
---
title
:
详解 Java 中的优先级队列(PriorityQueue 附源码分析)
shortTitle
:
PriorityQueue
shortTitle
:
优先级队列
PriorityQueue
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,优先级队列,PriorityQueue,java 优先级队列,java PriorityQueue
---
# 6.13 PriorityQueue
# 6.13
优先级队列
PriorityQueue
>继续有请王老师,来上台给大家讲讲优先级队列 PriorityQueue。
...
...
docs/collection/arraydeque.md
浏览文件 @
2fc4aea9
---
title
:
详解 Java 中的双端队列(ArrayDeque附源码分析)
shortTitle
:
ArrayDeque
shortTitle
:
双端队列
ArrayDeque
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,ArrayDeque,堆,队列,java 双端队列,java ArrayDeque
---
# 6.12 ArrayDeque
# 6.12
双端队列
ArrayDeque
>好,我们这节继续有请王老师上台来给大家讲 ArrayDeque,鼓掌欢迎了👏🏻。
...
...
docs/collection/arraylist.md
浏览文件 @
2fc4aea9
---
title
:
Java ArrayList详解(附源码分析)
shortTitle
:
ArrayList
shortTitle
:
ArrayList
详解(附源码)
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,ArrayList,ArrayList源码,java arraylist
---
# 6.3 ArrayList
# 6.3 ArrayList
详解(附源码)
“二哥,听说今天我们开讲 ArrayList 了?好期待哦!”三妹明知故问,这个托配合得依然天衣无缝。
...
...
docs/collection/fail-fast.md
浏览文件 @
2fc4aea9
---
title
:
为什么不能在foreach里执行删除操作?
title
:
Java
为什么不能在foreach里执行删除操作?
shortTitle
:
为什么不能在foreach里删除元素?
category
:
-
Java核心
...
...
docs/collection/gailan.md
浏览文件 @
2fc4aea9
---
title
:
聊聊Java的集合框架
shortTitle
:
Java的集合框架
title
:
聊聊Java的集合框架
的构成(概览)
shortTitle
:
集合框架的构成
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,集合框架,容器,java 集合框架,java集合,java容器
---
# 6.1
Java的集合框架
# 6.1
集合框架的构成
眼瞅着三妹的王者荣耀杀得正嗨,我趁机喊到:“别打了,三妹,我们来一起学习 Java 的集合框架吧。”
...
...
docs/collection/hashmap.md
浏览文件 @
2fc4aea9
---
title
:
Java HashMap详解(附源码分析)
shortTitle
:
HashMap
shortTitle
:
HashMap
详解(附源码)
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,HashMap,java hashmap
---
# 6.9 HashMap
# 6.9 HashMap
详解(附源码)
这篇文章将通过源码的方式,详细透彻地讲清楚 Java 的 HashMap,包括 hash 方法的原理、HashMap 的扩容机制、HashMap的加载因子为什么是 0.75 而不是 0.6、0.8,以及 HashMap 为什么是线程不安全的,基本上 HashMap 的
[
常见面试题
](
https://tobebetterjavaer.com/interview/java-hashmap-13.html
)
,都会在这一篇文章里讲明白。
...
...
docs/collection/iterator-iterable.md
浏览文件 @
2fc4aea9
---
title
:
迭代器Iterator和Iterable有什么区别?
title
:
Java
迭代器Iterator和Iterable有什么区别?
shortTitle
:
迭代器Iterator和Iterable
category
:
-
Java核心
...
...
docs/collection/linkedhashmap.md
浏览文件 @
2fc4aea9
---
title
:
Java LinkedHashMap详解(附源码分析)
shortTitle
:
LinkedHashMap
shortTitle
:
LinkedHashMap
详解(附源码)
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,LinkedHashMap,java LinkedHashMap
---
# 6.10 LinkedHashMap
# 6.10 LinkedHashMap
详解(附源码)
>这篇继续换个文风来写,给大家一点新鲜的空气。
...
...
docs/collection/linkedlist.md
浏览文件 @
2fc4aea9
---
title
:
Java LinkedList详解(附源码分析)
shortTitle
:
LinkedList
shortTitle
:
LinkedList
详解(附源码)
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,LinkedList,LinkedList源码,java linkedlist
---
# 6.4 LinkedList
# 6.4 LinkedList
详解(附源码)
>这篇换个表达方式,一起来欣赏。
...
...
docs/collection/list-war-2.md
浏览文件 @
2fc4aea9
---
title
:
聊聊ArrayList和LinkedList的区别
title
:
聊聊
Java中
ArrayList和LinkedList的区别
shortTitle
:
ArrayList和LinkedList的区别
category
:
-
Java核心
...
...
docs/collection/time-complexity.md
浏览文件 @
2fc4aea9
---
title
:
简单聊一下时间复杂度
shortTitle
:
时间复杂度
shortTitle
:
关于
时间复杂度
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,时间复杂度,java 时间复杂度
---
# 6.2 时间复杂度
# 6.2
关于
时间复杂度
“二哥,为什么要讲时间复杂度呀?”三妹问。
...
...
docs/collection/treemap.md
浏览文件 @
2fc4aea9
---
title
:
Java TreeMap详解(附源码分析)
shortTitle
:
TreeMap
shortTitle
:
TreeMap
详解(附源码)
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,TreeMap,java treemap
---
# 6.11 TreeMap
# 6.11 TreeMap
详解(附源码)
>下面有请王老师上台,来给大家讲一讲 TreeMap,鼓掌了!
...
...
docs/home.md
浏览文件 @
2fc4aea9
...
...
@@ -167,7 +167,7 @@ head:
### 集合框架(容器)
-
[
聊聊Java的集合框架
](
collection/gailan.md
)
-
[
聊聊Java的集合框架
的构成(概览)
](
collection/gailan.md
)
-
[
简单聊一下时间复杂度
](
collection/time-complexity.md
)
-
[
Java ArrayList详解(附源码分析)
](
collection/arraylist.md
)
-
[
Java LinkedList详解(附源码分析)
](
collection/linkedlist.md
)
...
...
@@ -221,7 +221,7 @@ head:
-
[
Java 8 Optional最佳指南
](
java8/optional.md
)
-
[
深入浅出Java 8 Lambda表达式
](
java8/Lambda.md
)
###
Java
重要知识点
### 重要知识点
-
[
Java命名规范
](
basic-extra-meal/java-naming.md
)
-
[
彻底弄懂Java中的Unicode和UTF-8编码
](
basic-extra-meal/java-unicode.md
)
...
...
docs/io/file-path.md
浏览文件 @
2fc4aea9
---
title
:
Java File:IO 流的开始与结束
shortTitle
:
File
shortTitle
:
关于
File
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Java IO,file,java文件,java目录,java文件增删改查,java file
---
# 7.2 File
# 7.2
关于
File
在 IO 操作中,文件的操作相对来说是比较复杂的,但也是使用频率最高的部分,我们几乎所有的项目中几乎都躺着一个叫做 FileUtil 或者 FileUtils 的工具类。那么 File 类可以说是其基石,我们必须得先来了解下。
...
...
docs/io/shangtou.md
浏览文件 @
2fc4aea9
---
title
:
Java IO 的分类
shortTitle
:
IO
分类
title
:
一文彻底搞清楚
Java IO 的分类
shortTitle
:
IO分类
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,Java IO,io,输入输出流
---
# 7.1 IO
分类
# 7.1 IO分类
“老王,Java IO 也太上头了吧?”新兵蛋子小二向头顶很凉快的老王抱怨道,“你瞧,我就按照传输方式对 IO 进行了一个简单的分类,就能搞出来这么多的玩意!”
...
...
docs/java8/Lambda.md
浏览文件 @
2fc4aea9
...
...
@@ -9,15 +9,16 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head
:
-
-
meta
-
name
:
keywords
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java8,lambda
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java8,lambda
,java lambda
---
# 10.3 Lambda表达式
今天分享的主题是《Lambda 表达式入门》,这也是之前一些读者留言强烈要求我写一写的,不好意思,让你们久等了,现在来满足你们,为时不晚吧?
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/java8/Lambda-1.jpg
)
## 01、初识 Lambda
##
#
01、初识 Lambda
Lambda 表达式描述了一个代码块(或者叫匿名方法),可以将其作为参数传递给构造方法或者普通方法以便后续执行。考虑下面这段代码:
...
...
@@ -74,7 +75,7 @@ public class LamadaTest {
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/java8/Lambda-2.jpg
)
## 02、Lambda 语法
##
#
02、Lambda 语法
每个 Lambda 表达式都遵循以下法则:
...
...
@@ -141,6 +142,7 @@ public static void main(String[] args) {
和匿名内部类一样,不要在 Lambda 表达式主体内对方法内的局部变量进行修改,否则编译也不会通过:Lambda 表达式中使用的变量必须是 final 的。
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/java8/Lambda-3.jpg
)
这个问题发生的原因是因为 Java 规范中是这样规定的:
>Any local variable, formal parameter, or exception parameter used but not declared in a lambda expression
...
...
@@ -181,7 +183,7 @@ c = 2;
下面我们来详细地一一介绍下。
### 01)把 limit 变量声明为 static
###
#
01)把 limit 变量声明为 static
要想把 limit 变量声明为 static,就必须将 limit 变量放在
`main()`
方法外部,因为
`main()`
方法本身是 static 的。完整的代码示例如下所示。
...
...
@@ -212,7 +214,7 @@ public class ModifyVariable2StaticInsideLambda {
OK,该方案是可行的。
### 02)把 limit 变量声明为 AtomicInteger
###
#
02)把 limit 变量声明为 AtomicInteger
AtomicInteger 可以确保 int 值的修改是原子性的,可以使用
`set()`
方法设置一个新的 int 值,
`get()`
方法获取当前的 int 值。
...
...
@@ -243,7 +245,7 @@ public class ModifyVariable2AtomicInsideLambda {
OK,该方案也是可行的。
### 03)使用数组
###
#
03)使用数组
使用数组的方式略带一些欺骗的性质,在声明数组的时候设置为 final,但更改 int 的值时却修改的是数组的一个元素。
...
...
@@ -274,7 +276,7 @@ public class ModifyVariable2ArrayInsideLambda {
OK,该方案也是可行的。
## 03、Lambda 和 this 关键字
##
#
03、Lambda 和 this 关键字
Lambda 表达式并不会引入新的作用域,这一点和匿名内部类是不同的。也就是说,Lambda 表达式主体内使用的 this 关键字和其所在的类实例相同。
...
...
@@ -346,7 +348,7 @@ this = com.cmower.java_demo.journal.LamadaTest@3feba861
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/java8/Lambda-4.jpg
)
## 04、最后
##
#
04、最后
尽管 Lambda 表达式在简化 Java 编程方面做了很多令人惊讶的努力,但在某些情况下,不当的使用仍然会导致不必要的混乱,大家伙慎用。
...
...
docs/java8/optional.md
浏览文件 @
2fc4aea9
...
...
@@ -9,18 +9,19 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head
:
-
-
meta
-
name
:
keywords
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java8,Optional
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java8,Optional
,java Optional
---
# 10.2 Optional最佳指南
想学习,永远都不晚,尤其是针对 Java 8 里面的好东西,Optional 就是其中之一,该类提供了一种用于表示可选值而非空引用的类级别解决方案。作为一名 Java 程序员,我真的是烦透了
NullPointerException(NPE)
,尽管和它熟得就像一位老朋友,知道它也是迫不得已——程序正在使用一个对象却发现这个对象的值为 null,于是 Java 虚拟机就怒发冲冠地把它抛了出来当做替罪羊。
想学习,永远都不晚,尤其是针对 Java 8 里面的好东西,Optional 就是其中之一,该类提供了一种用于表示可选值而非空引用的类级别解决方案。作为一名 Java 程序员,我真的是烦透了
[
NullPointerException(NPE)
](
https://tobebetterjavaer.com/exception/npe.html
)
,尽管和它熟得就像一位老朋友,知道它也是迫不得已——程序正在使用一个对象却发现这个对象的值为 null,于是 Java 虚拟机就怒发冲冠地把它抛了出来当做替罪羊。
当然了,我们程序员是富有责任心的,不会坐视不管,于是就有了大量的 null 值检查。尽管有时候这种检查完全没有必要,但我们已经习惯了例行公事。终于,Java 8 看不下去了,就引入了 Optional,以便我们编写的代码不再那么刻薄呆板。
![](
https://cdn.tobebetterjavaer.com/
tobebetterjavaer/images/java8/optional-1.jp
g
)
![](
https://cdn.tobebetterjavaer.com/
stutymore/guava-20230329172935.pn
g
)
## 01、没有 Optional 会有什么问题
##
#
01、没有 Optional 会有什么问题
我们来模拟一个实际的应用场景。小王第一天上班,领导老马就给他安排了一个任务,要他从数据库中根据会员 ID 拉取一个会员的姓名,然后将姓名打印到控制台。虽然是新来的,但这个任务难不倒小王,于是他花了 10 分钟写下了这段代码:
...
...
@@ -59,7 +60,7 @@ Exception in thread "main" java.lang.NullPointerException
at com.cmower.dzone.optional.WithoutOptionalDemo.main(WithoutOptionalDemo.java:24)
```
## 02、Optional 是如何解决这个问题的
##
#
02、Optional 是如何解决这个问题的
小王把代码提交后,就兴高采烈地去找老马要新的任务了。本着虚心学习的态度,小王请求老马看一下自己的代码,于是老王就告诉他应该尝试一下 Optional,可以避免没有必要的 null 值检查。现在,让我们来看看小王是如何通过 Optional 来解决上述问题的。
...
...
@@ -95,7 +96,7 @@ class Member {
Optional 之所以可以解决 NPE 的问题,是因为它明确的告诉我们,不需要对它进行判空。它就好像十字路口的路标,明确地告诉你该往哪走。
## 03、创建 Optional 对象
##
#
03、创建 Optional 对象
1)可以使用静态方法
`empty()`
创建一个空的 Optional 对象
...
...
@@ -128,7 +129,7 @@ System.out.println(optOrNull); // 输出:Optional.empty
`ofNullable()`
方法内部有一个三元表达式,如果为参数为 null,则返回私有常量 EMPTY;否则使用 new 关键字创建了一个新的 Optional 对象——不会再抛出 NPE 异常了。
## 04、判断值是否存在
##
#
04、判断值是否存在
可以通过方法
`isPresent()`
判断一个 Optional 对象是否存在,如果存在,该方法返回 true,否则返回 false——取代了
`obj != null`
的判断。
...
...
@@ -150,7 +151,7 @@ Optional<String> optOrNull = Optional.ofNullable(null);
System
.
out
.
println
(
opt
.
isPresent
());
// 输出:true
```
## 05、非空表达式
##
#
05、非空表达式
Optional 类有一个非常现代化的方法——
`ifPresent()`
,允许我们使用函数式编程的方式执行一些代码,因此,我把它称为非空表达式。如果没有该方法的话,我们通常需要先通过
`isPresent()`
方法对 Optional 对象进行判空后再执行相应的代码:
...
...
@@ -175,7 +176,7 @@ Optional<String> opt = Optional.of("沉默王二");
opt
.
ifPresentOrElse
(
str
->
System
.
out
.
println
(
str
.
length
()),
()
->
System
.
out
.
println
(
"为空"
));
```
## 06、设置(获取)默认值
##
#
06、设置(获取)默认值
有时候,我们在创建(获取) Optional 对象的时候,需要一个默认值,
`orElse()`
和
`orElseGet()`
方法就派上用场了。
...
...
@@ -254,7 +255,7 @@ orElseGet
咦,
`orElseGet()`
没有去调用
`getDefaultValue()`
。哪个方法的性能更佳,你明白了吧?
## 07、获取值
##
#
07、获取值
直观从语义上来看,
`get()`
方法才是最正宗的获取 Optional 对象值的方法,但很遗憾,该方法是有缺陷的,因为假如 Optional 对象的值为 null,该方法会抛出 NoSuchElementException 异常。这完全与我们使用 Optional 类的初衷相悖。
...
...
@@ -278,7 +279,7 @@ Exception in thread "main" java.util.NoSuchElementException: No value present
尽管抛出的异常是 NoSuchElementException 而不是 NPE,但在我们看来,显然是在“五十步笑百步”。建议
`orElseGet()`
方法获取 Optional 对象的值。
## 08、过滤值
##
#
08、过滤值
小王通过 Optional 类对之前的代码进行了升级,完成后又兴高采烈地跑去找老马要任务了。老马觉得这小伙子不错,头脑灵活,又干活积极,很值得培养,就又交给了小王一个新的任务:用户注册时对密码的长度进行检查。
...
...
@@ -311,7 +312,7 @@ System.out.println(result);
这次程序输出的结果为 true,因为密码变成了 7 位,在 6 到 10 位之间。想象一下,假如小王使用 if-else 来完成这个任务,代码该有多冗长。
## 09、转换值
##
#
09、转换值
小王检查完了密码的长度,仍然觉得不够尽兴,觉得要对密码的强度也进行检查,比如说密码不能是“password”,这样的密码太弱了。于是他又开始研究起了
`map()`
方法,该方法可以按照一定的规则将原有 Optional 对象转换为一个新的 Optional 对象,原有的 Optional 对象不会更改。
...
...
@@ -350,10 +351,6 @@ public class OptionalMapFilterDemo {
}
```
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/java8/optional-2.jpg
)
好了,我亲爱的读者朋友,以上就是本文的全部内容了——可以说是史上最佳 Optional 指南了,能看到这里的都是最优秀的程序员,二哥必须要伸出大拇指为你点个赞。
...
...
docs/java8/stream.md
浏览文件 @
2fc4aea9
---
title
:
Java 8 Stream流详细用法
shortTitle
:
Stream流
详细用法
shortTitle
:
Stream流
category
:
-
Java核心
tag
:
...
...
@@ -9,9 +9,11 @@ description: Java程序员进阶之路,小白的零基础Java教程,从入
head
:
-
-
meta
-
name
:
keywords
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java8,stream
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java8,stream
,java stream
---
# 10.1 Stream流
两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。
![](
https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/java8/stream-1.jpg
)
...
...
@@ -55,12 +57,11 @@ Stream<T> distinct();
long
count
();
```
中间操作不会立即执行,只有等到终端操作的时候,流才开始真正地遍历,用于映射、过滤等。通俗点说,就是一次遍历执行多个操作,性能就大大提高了。
理论部分就扯这么多,下面直接进入实战部分。
## 01、创建流
##
#
01、创建流
如果是数组的话,可以使用
`Arrays.stream()`
或者
`Stream.of()`
创建流;如果是集合的话,可以直接使用
`stream()`
方法创建流,因为该方法已经添加到 Collection 接口中。
...
...
@@ -96,11 +97,11 @@ List<Long> aList = new ArrayList<>();
Stream
<
Long
>
parallelStream
=
aList
.
parallelStream
();
```
## 02、操作流
##
#
02、操作流
Stream 类提供了很多有用的操作流的方法,我来挑一些常用的给你介绍一下。
### 1)过滤
###
#
1)过滤
通过
`filter()`
方法可以从流中筛选出我们想要的元素。
...
...
@@ -136,7 +137,7 @@ for (String s : strs) {
王力宏
```
### 2)映射
###
#
2)映射
如果想通过某种操作把一个流中的元素转化成新的流中的元素,可以使用
`map()`
方法。
...
...
@@ -165,7 +166,7 @@ public class MapStreamDemo {
3
```
### 3)匹配
###
#
3)匹配
Stream 类提供了三个方法可供进行元素匹配,它们分别是:
...
...
@@ -204,7 +205,7 @@ true
true
```
### 4)组合
###
#
4)组合
`reduce()`
方法的主要作用是把 Stream 中的元素组合起来,它有两种用法:
...
...
@@ -250,7 +251,7 @@ public class ReduceStreamDemo {
0、1、2、3 在没有起始值相加的时候结果为 6;有起始值 6 的时候结果为 12。
## 03、转换流
##
#
03、转换流
既然可以把集合或者数组转成流,那么也应该有对应的方法,将流转换回去——
`collect()`
方法就满足了这种需求。
...
...
docs/string/immutable.md
浏览文件 @
2fc4aea9
---
title
:
聊聊 Java 字符串,以及为什么String是不可变的?
shortTitle
:
聊聊字符串以及
为什么不可变
shortTitle
:
字符串
为什么不可变
category
:
-
Java核心
tag
:
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java字符串,String,不可变
---
# 4.4
Java字符串及不可变性
# 4.4
字符串为什么不可变
我正坐在沙发上津津有味地读刘欣大佬的《码农翻身》——Java 帝国这一章,门铃响了。起身打开门一看,是三妹,她从学校回来了。
...
...
docs/string/intern.md
浏览文件 @
2fc4aea9
...
...
@@ -12,7 +12,7 @@ head:
content
:
Java,Java SE,Java基础,Java教程,Java程序员进阶之路,Java进阶之路,Java入门,教程,java字符串,String,intern,string intern,java intern,java string intern
---
# 4.6
深入解析
String.intern()方法
# 4.6 String.intern()方法
“哥,你发给我的那篇文章我看了,结果直接把我给看得不想学 Java 了!”三妹气冲冲地说。
...
...
二哥的 Java 进阶之路.md
浏览文件 @
2fc4aea9
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录