From 0f68d399e9e17e058f0884ef15517936b54f800a Mon Sep 17 00:00:00 2001 From: fanxb Date: Wed, 28 Aug 2019 16:53:23 +0800 Subject: [PATCH 1/3] update --- .../1.java文本,网络等资源自动回收.md} | 0 .../多线程/1.java多线程总结1-线程基础.md} | 0 .../多线程/2.java多线程总结2--同步.md} | 0 .../多线程/3.java多线程总结3--阻塞队列和线程安全集合.md} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename java/{其他/4.java文本,网络等资源自动回收.md => 1.基础知识/1.java文本,网络等资源自动回收.md} (100%) rename java/{其他/5.java多线程总结1-线程基础.md => 1.基础知识/多线程/1.java多线程总结1-线程基础.md} (100%) rename java/{其他/6.java多线程总结2--同步.md => 1.基础知识/多线程/2.java多线程总结2--同步.md} (100%) rename java/{其他/7.java多线程总结3--阻塞队列和线程安全集合.md => 1.基础知识/多线程/3.java多线程总结3--阻塞队列和线程安全集合.md} (100%) diff --git a/java/其他/4.java文本,网络等资源自动回收.md b/java/1.基础知识/1.java文本,网络等资源自动回收.md similarity index 100% rename from java/其他/4.java文本,网络等资源自动回收.md rename to java/1.基础知识/1.java文本,网络等资源自动回收.md diff --git a/java/其他/5.java多线程总结1-线程基础.md b/java/1.基础知识/多线程/1.java多线程总结1-线程基础.md similarity index 100% rename from java/其他/5.java多线程总结1-线程基础.md rename to java/1.基础知识/多线程/1.java多线程总结1-线程基础.md diff --git a/java/其他/6.java多线程总结2--同步.md b/java/1.基础知识/多线程/2.java多线程总结2--同步.md similarity index 100% rename from java/其他/6.java多线程总结2--同步.md rename to java/1.基础知识/多线程/2.java多线程总结2--同步.md diff --git a/java/其他/7.java多线程总结3--阻塞队列和线程安全集合.md b/java/1.基础知识/多线程/3.java多线程总结3--阻塞队列和线程安全集合.md similarity index 100% rename from java/其他/7.java多线程总结3--阻塞队列和线程安全集合.md rename to java/1.基础知识/多线程/3.java多线程总结3--阻塞队列和线程安全集合.md From 4a6b5ee1ebdc9ec0ff37cba36662b3d62d397ff5 Mon Sep 17 00:00:00 2001 From: FleyX Date: Wed, 4 Sep 2019 14:45:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=8D=95=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java/springboot系列/1. springboot详细日志配置.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/springboot系列/1. springboot详细日志配置.md b/java/springboot系列/1. springboot详细日志配置.md index 065c635..48d916e 100644 --- a/java/springboot系列/1. springboot详细日志配置.md +++ b/java/springboot系列/1. springboot详细日志配置.md @@ -204,7 +204,7 @@ appender 也是子节点之一,将会在后面说明。 - name: 必须。用来指定受此 loger 约束的某个包或者某个具体的类 - level:可选。设置打印级别。默认为 root 的级别。 -- addtivity: 可选。是否向上级 loger(也就是 root 节点)传递打印信息。默认为 true。 +- additivity: 可选。是否向上级 loger(也就是 root 节点)传递打印信息。默认为 true。 使用示例如下: @@ -226,8 +226,8 @@ appender 也是子节点之一,将会在后面说明。 ```xml - - + + ``` From 27a8783e5cb4452082de935ada0fb5bee3e6b2e8 Mon Sep 17 00:00:00 2001 From: fanxb Date: Mon, 9 Sep 2019 15:46:01 +0800 Subject: [PATCH 3/3] add --- java/1.基础知识/2.stream流库总结.md | 67 +++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 java/1.基础知识/2.stream流库总结.md diff --git a/java/1.基础知识/2.stream流库总结.md b/java/1.基础知识/2.stream流库总结.md new file mode 100644 index 0000000..5c152dd --- /dev/null +++ b/java/1.基础知识/2.stream流库总结.md @@ -0,0 +1,67 @@ +--- +id: "2019-03-25-20-52" +date: "2019/03/25 20:52" +title: "java8新增的stream流库,看这篇就够了" +tags: ["java", "stream"] +categories: + - "java" + - "java基础" +--- + +# 什么是流 + +流提供了一种在比集合更高的概念级别上指定计算的数据视图。通过使用各种流我们可以指定要干什么什么,而不是怎么干,将具体的实现留给库来做。比如我们要计算一个整数列表的平均值,使用流库的话,我们只需要指定数据源和结果属性。然后流库来进行具体的计算,由于细节是流库实现的,因此它也可以对计算进行优化,以提高效率。 + +简而言之,有了流库,之前需要写很多行代码实现的操作,现在可能只需一行就能搞定了,而且效率可能会更高。 + +# 概念引入 + +以一个简单的例子来引入流。比如我们想统一某个字符串中某个单词出现的频率。 + +```java +/** + * 统计某个单词出现次数 + */ +public void function1() { + // 通过非字母分割字符串 + List strs = Arrays.asList("I love you! Do you love me?".split("\\PL+")); + //传统 + int count = 0; + for (String str : strs) { + if (str.equals("you")) { + count++; + } + } + + // 使用流 + long streamCount = strs.stream().filter(item -> item.equals("you")).count(); +} +``` + +流遵循了 **做什么而非怎么做** 的原则,上面的流版本中,我们仅仅描述了要做什么:获取单词"you"出现的次数. + +流具有以下三大特性: + +- 流并不存储元素。流的元素要么来源底层的集合,要么是即时生成的(通过一个函数生成) +- 流的操作不会修改底层数据源(不会修改源集合) +- 流的操作是尽可能惰性的。只有在需要其结果的时候,操作才会执行。 + +流分为两大类: + +- stream 顺序流 +- parallelStream 并行流。会尽量利用多线程来提高速度 + +# 流的创建 + +## 从集合创建 + +很简单,通过 Collection 接口的 stream(parallelStream)方法,可以将任意一个集合转换为流。 + +```java +//strs为一个集合 +Stream stream = strs.stream(); +stream = strs.parallelStream(); +``` + +## 从数组创建 +