自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 收藏
  • 关注

原创 Java8 CompletableFuture(7) CompletableFuture allOf 获取所有线程结果

一、CompletableFuture allOf的优点场景:当有一批任务交给线程池执行,我们需要获取所有线程的返回结果。Future的get()时阻塞的,如果循环get()每一个线程的结果,一个线程会卡住后面所有线程CompletionService的take().get()虽然不会因为某个线程阻塞后面的线程,但是功能不丰富CompletableFuture提供的功能丰富,使用简单,代码优雅二、测试案例一串数字1, 2, 3, 4, 5, 6, 7, 8, 9, 10开启线程,执行乘以

2021-05-07 17:12:58 121

原创 Java8 CompletableFuture(6) thenCompose和thenCombine的区别

CompletableFuture exceptionally whenComplete handle

2021-05-07 14:36:55 152 1

原创 Java8 CompletableFuture(5)异常处理 handle

Java8 CompletableFuture handle一、handle的作用和特点1. handle的特点2. handle和thenApply的区别3. handle和whenComplete的区别二、测试案例一、handle的作用和特点1. handle的特点在写代码时,我们常用try…catch…finally这样的代码块处理异常。而handle就像finally,不论正常返回还是出异常都会进入handle,类似whenComplete。handle()一般接收new BiFuncti

2021-05-07 14:01:11 55

原创 Java8 CompletableFuture(4)异常处理 whenComplete

一、whenComplete的作用当CompletableFuture的任务不论是正常完成还是出现异常它都会调用whenComplete这回调函数。正常完成:whenComplete返回结果和上级任务一致,异常为null;出现异常:whenComplete返回结果为null,异常为上级任务的异常;即调用get()时,正常完成时就获取到结果,出现异常时就会抛出异常,需要你处理该异常。二、测试案例1. 只用whenCompletepublic class Thread02_WhenComple

2021-05-07 07:58:36 142

原创 Java8 CompletableFuture(3)异常处理 exceptionally

Java8 CompletableFuture exceptionally一、前言二、测试案例一、前言在写代码时,经常需要对异常进行处理,最常用的就是try catch。在用CompletableFuture编写多线程时,如果需要处理异常,可以用exceptionally,它的作用相当于catch。exceptionally的特点:当出现异常时,会触发回调方法exceptionallyexceptionally中可指定默认返回结果,如果出现异常,则返回默认的返回结果二、测试案例publi

2021-05-07 07:25:07 102

原创 Java8 Stream(11)List转Map

一、前言开发中,List转Map是非常常见的操作,例如:List<T> 转 Map<String, T>List<T> 转 Map<String, List<T>>List<Map<String, Object>> 转 Map<String, List<Map<String, Object>>>先造点数据:pigs.add(new Pig(1, "猪爸爸", 31, "M.

2021-05-06 17:07:59 103

原创 Java8 Stream(1)详细总结目录

Java8 Stream(2)创建StreamJava8 Stream(3)遍历 ListJava8 Stream(4)遍历 MapJava8 Stream(5)List集合过滤 filter 和 limitJava8 Stream(6)List集合去重 distinct 和 toSetJava8 Stream(7)List集合排序 多字段排序 Null值排序Java8 Stream(8)List集合转换 map flatMap 区别Java8 Stream(9)List集合统计 求和 最大值

2021-04-30 22:26:12 80 1

原创 Java8 Stream(10)Collectors groupingBy partitioningBy 案例详解

Java8 Stream(11)Collectors 案例详解一、获得对象中某1个属性集合1. toList 获取id的List集合2. toSet 获取gender的Set集合二、List 转 Map1. toMap 将List的值转成 id -> name的Map2. 解决key重复后异常三、求和 最大值 最小值 平均值1. 求age最大的对象2. 求age的平局值3. 求age总和4. 求统计信息四、joining 拼接字符串五、groupingBy 分组1. 一级分组2. 一级分组,且统计co

2021-04-30 18:17:53 87 2

原创 Java8 Stream(9)List集合查找 findFirst、findAny、anyMatch、allMatch、noneMatch

在开发中,经常要判断集合中是否有指定的值,对于在集合中查询匹配数据,可以用到findFirst、findAny、anyMatch、allMatch和noneMatch这些方法。先造点数据pigs.add(new Pig(1, "猪爸爸", 31, "M", false));pigs.add(new Pig(2, "猪妈妈", 28, "F", true));pigs.add(new Pig(3, "乔治", 2, "M", false));pigs.add(new Pig(4, "佩奇", 5,

2021-04-30 10:26:06 164

原创 Java8 Stream(8)List集合统计 求和 最大值 最小值 平均值

对集合数据的统计,是开发中常用的功能,掌握好Java Stream提供的方法,避免自己写代码统计,可以提高工作效率。先造点数据:pigs.add(new Pig(1, "猪爸爸", 31, "M", false));pigs.add(new Pig(2, "猪妈妈", 28, "F", true));pigs.add(new Pig(3, "乔治", 2, "M", false));pigs.add(new Pig(4, "佩奇", 5, "F", false));一、统计个数用Stream

2021-04-30 07:05:22 128

原创 Java8 Stream(7)List集合转换 map flatMap 区别

一、映射 mapmap是映射的意思,可以理解把数据1对1的转换。map方法定义如下<R> Stream<R> map(Function<? super T, ? extends R> mapper);Function<? super T, ? extends R> mapper表示一个函数,输入类型是T,输出类型是R。相当于把Stream流中每一个元素从T类型转换成R类型。1. 造点数据pigs.add(new Pig(1, "猪爸爸", 31

2021-04-29 18:29:43 58 1

原创 Java8 Stream(6)List集合排序 多字段排序 Null值排序

一、单字段排序先造点数据pigs.add(new Pig(1, "猪爸爸", 31, "M", false));pigs.add(new Pig(2, "猪妈妈", 28, "F", true));pigs.add(new Pig(3, "乔治", 2, "M", false));pigs.add(new Pig(4, "佩奇", 5, "F", false));按照id升序pigs.sort(comparing(Pig::getId));按照id降序pigs.sort(compari

2021-04-29 16:00:43 78

原创 Java8 Stream(5)List集合去重 distinct 和 toSet

一、distinct 去重Stream流的distinct()方法可以轻松实现去重。String[] codes = {"D", "A", "B", "A", "B","C"};List<String> codeList = new ArrayList<>(Arrays.asList(codes)) ;//distinctcodeList.stream() .distinct() .forEach(System.out::println);

2021-04-29 14:34:46 66

原创 Java8 Stream(4)List集合过滤 filter 和 limit

一、过滤filterfilter似乎Stream中最常用的功能,在Java8之前,得在for循环中添加条件判断来过滤数据,非常难看。1. 先造点测试数据pigs.add(new Pig(1, "猪爸爸", 31, "M", false));pigs.add(new Pig(2, "猪妈妈", 28, "F", true));pigs.add(new Pig(3, "乔治", 2, "M", false));pigs.add(new Pig(4, "佩奇", 5, "F", false));2

2021-04-29 14:09:46 52

原创 Java8 Stream(3)遍历 Map

一、Java8之前遍历Map的方式为啥要先介绍Java8之前的方式呢?因为没有对比,就没有伤害。1. 最常用的方式:遍历entrySet//最常见的用法,一般在键值对都需要使用for (Map.Entry<String, Object> entry : map1.entrySet()){ System.out.println(entry.getKey() + " : " + entry.getValue());}2. 在for循环中遍历key或者values一般适用于

2021-04-29 11:13:19 84

原创 Java8 Stream(2)遍历 List

一、Java8之前遍历List方式1. Iterator迭代器Iterator<String> iterator = codeList.iterator();while (iterator.hasNext()){ System.out.println(iterator.next());}2. for循环for (int i = 0; i < codeList.size(); i++){ System.out.println(codeList.get(i));

2021-04-29 10:21:33 74

原创 Java8 Stream(1)创建Stream

Java8 Stream(2)创建Stream一、什么是Stream二、创建Stream的方式1. 使用Stream静态方法创建Stream2. 通过Collection子类获取Stream三、 注意:流只能使用一次四、并行流五、总结一、什么是Stream集合是Java最最常用的API,我们代码里到处都有List、Map和Set等。而Stream可以看成遍历数据集的高级Iterator(迭代器)。Stream的语法优美,性能也还可以,是Java程序员必须要掌握的。二、创建Stream的方式创建S

2021-04-28 22:34:01 52 1

原创 Java8 CompletableFuture(2)回调函数 thenApply thenAccept thenRun

CompletableFuture 串行回调函数 thenApply thenAccept thenRun thenCompose一、前言二、串行的回调函数1. thenApply 转换结果2. thenAccept 消费结果3. thenRun 任务完成后触发的回调4. thenCompose5. thenApply,thenAccept,thenRun,thenCompose的区别一、前言在上一篇介绍了CompletableFuture的创建新线程,本篇博客讲解下串行的回调函数。二、串行的回调函数

2021-04-22 18:46:03 77

原创 Java8 CompletableFuture(1)创建线程 supplyAsync runAsync

CompletableFuture 串行回调函数一、前言二、CompletableFuture创建新线程1. 创建测试用的业务类2. supplyAsync(有返回值)3. runAsync(无返回值)三、串行的回调函数1. thenApply 转换结果2. thenAccept 消费结果3. thenRun 任务完成后触发的回调4. thenCompose5. thenApply,thenAccept,thenRun,thenCompose的区别一、前言Java8推出了CompletableFutur

2021-04-22 18:19:29 112

原创 Java多线程(十四) Java8 newWorkStealingPool 线程池

一、newWorkStealingPool是什么?newWorkStealingPool简单翻译是任务窃取线程池。newWorkStealingPool 是Java8添加的线程池。和别的4种不同,它用的是ForkJoinPool。使用ForkJoinPool的好处是,把1个任务拆分成多个“小任务”,把这些“小任务”分发到多个线程上执行。这些“小任务”都执行完成后,再将结果合并。之前的线程池中,多个线程共有一个阻塞队列,而newWorkStealingPool 中每一个线程都有一个自己的队列。当线程

2021-04-21 07:08:50 92

原创 Java多线程(十三) Java创建线程池,参数详解

一、前言昨天下班后和老婆一起去吃烧烤,老婆一直抱怨工作压力大,在公司快2年也没涨薪,平时给的绩效都是C。所以到明年肯定还是不涨薪,感觉上班非常烦躁。其实她公司福利还可以,就说一直被打压下去,感觉没脸待了。毕竟30+的女同志,在IT行业不容易,她公司加薪都给男的程序员了。聊到最后她说:如果我收入高了,她也轻松点就在这家公司混了,不去考虑跳槽了。今天中午又告诉我之前上一家的同事现在跳槽了几家,现在跳到京东,年薪可高了,比我高很多。也怪我没本事,让老婆有这么大的职场焦虑,她还是个孕妇,每天照顾大宝都

2021-04-20 16:50:46 142 2

原创 IT行业 三十而已 夫妻俩的职场焦虑

昨天下班后和老婆一起去吃烧烤,老婆一直抱怨工作压力大,在公司快2年也没涨薪,平时给的绩效都是C。所以到明年肯定还是不涨薪,感觉上班非常烦躁。其实她公司福利还可以,就说一直被打压下去,感觉没脸待了。毕竟30+的女同志,在IT行业不容易,她公司加薪都给男的程序员了。聊到最后他说:如果我收入高了,她也轻松点就在这家公司混了,不去考虑跳槽了。今天中午又告诉我之前上一家的同事现在跳槽了几家,现在跳到京东,年薪可高了,比我高很多。也怪我没本事,让老婆有这么大的职场焦虑,她还是个孕妇,每天照顾大宝都够累的。

2021-04-16 18:27:32 85 2

原创 Java多线程(十二) Java中sleep和yield的区别

一、前言昨天大学时宿舍的舍长突然联系,说已经回到大学母校了,说是看望老师。提到以后有时间大家一起回母校聚一聚。时光荏苒,光阴似箭。我已人到中年,这些年我总会偶尔想起我的一位大学舍友。亮仔,大家都这么叫他,他在我对面的床,个子不高,比较瘦,脸很白,再配上天然的卷发。毕业后,没怎么联系过,有一天看到他QQ发了说说,大概是得了什么病,他自己也很奇怪。我问他怎么了,他只是简单的说得了肠道上的病,已经躺床上好久了。后来我也没问过,突然有一天,宿舍里和亮仔同乡的舍友发消息说亮仔已经走了。很惊讶这么突然,

2021-04-15 15:49:46 31

原创 和故人比,现在的每一天都多么奢侈,珍惜当天,不要虚度

昨天大学时宿舍的舍长突然联系,说已经回到大学母校了,说是看望老师。提到以后有时间大家一起回母校聚一聚。时光荏苒,光阴似箭。我已人到中年,这些年我总会偶尔想起我的一位大学舍友。亮仔,大家都这么叫他,他在我对面的床,个子不高,比较瘦,脸很白,再配上天然的卷发。毕业后,没怎么联系过,有一天看到他QQ发了说说,大概是得了什么病,他自己也很奇怪。我问他怎么了,他只是简单的说得了肠道上的病,已经躺床上好久了。后来我也没问过,突然有一天,宿舍里和亮仔同乡的舍友发消息说亮仔已经走了。很惊讶这么突然,也很遗憾在

2021-04-15 14:22:37 29 1

原创 Java多线程 (1) 创建线程的几种方式

创建线程的几种方式一、前言二、了解下 Thread、Runnable二、创建线程的几种方式1. 继承(extends)Thread类2. 实现(implements)Runnable接口3. FutureTask结合Callable3.1 FutureTask3.2 Callable接口一、前言又到了金三银四了,想想已经2年没涨过工资了,还扣我绩效工资,气不打一处来。本来空一半的办公室,又陆续住满新人,在指导新人业务时,想想这哥们工资应该比我高,虽然工作年限没我多。公司宁可高薪招新人,也不愿意给我们

2021-04-15 10:54:20 38

原创 Flink教程(23) 详解 算子链 并行度 Task

详解 算子链 并行度 Task亚瑟王镇楼一、前言二、WordCount程序的Job Graph(任务图)1. 代码和Job Graph(任务图)的对应关系2. 什么是并行度Parallelism?2. 为什么Socket Stream的**Parallelism**是1,后面2个的**Parallelism**是8?3. 如何设置并行度?3.1 Flink配置文件3.2 WebUI或者CLI3.3 代码中设置env全局并行度3.4 代码中设置算子的并行度3.5 并行度的优先级三、算子合并优化机制1. Wor

2021-04-07 19:22:30 94 1

原创 Flink教程(22) 窗口 interval join的使用案例

Flink 窗口 interval join的使用一、前言二、interval join介绍三、语法案例一、前言在之前的博客两条流关联 window窗口的 join leftJoin使用案例中,介绍了window join的使用方法。但是window join可能稍微复杂和麻烦,现在在真实的工作中,用interval join的情况比较多。interval join相对逻辑简单,好理解些。二、interval join介绍interval join只支持事件时间的场景只能支持两条流的关联在

2021-04-01 16:01:55 110

原创 CSDN居然还有这么一群奇怪的人

发现CSDN有个奇怪的现象,很多人喜欢不停的给别人博客留言,内容无非是“写的不错,加油,欢迎回踩”“写的太棒了,反手一个赞”后来发现他们会一天之内给很多人博客留言,留言内容差不多。再看他们博客访问量,都是非常高的几十万,但是他们博客质量和访问量不匹配。我想说,写博客是分享,但更重要是自己的积累,写给自己看,何必追求访问量呢?...

2021-03-31 18:43:14 47

原创 Flink教程(21) EventTime事件时间 Watermark水位线 注意点

Flink Window窗口 EventTime事件时间 Watermark水位线一、前言二、事件时间1. 时间一定是精确到毫秒2. 注意时区问题,我们在东八区3. 时间窗口是左闭右开4. 时间窗口的开始时间如何计算?三、水位线1. 水位线的特点2. 水位线控制窗口何时结束一、前言Flink中窗口、事件时间、水位线都是很重要的概念,网上介绍他们的博客非常多。我就没有必要像写八股文那样再写一遍。窗口、事件时间、水位线这3个东西放在一起,他们其实解决一个问题,那就是窗口在什么时候关闭,并触发计算?下

2021-03-31 18:18:11 92

原创 Flink教程(20) 窗口函数 ReduceFunction AggregateFunction ProcessWindowFunction 结合使用

ReduceFunction AggregateFunction ProcessWindowFunction 结合使用一、窗口函数的分类1. 全量和增量的区别2. apply和process的区别3. reduce和aggregate的区别二、AggregateFunction和ProcessWindowFunction结合使用1. 需求背景2. 分析3. 程序主体4. AggregateFunction5. ProcessWindowFunction一、窗口函数的分类大多数Flink应用都是要划分窗口

2021-03-31 17:12:40 217

原创 大龄程序员千场亚瑟王谈如何戒《王者荣耀》

Flink Watermark详解

2021-03-31 11:34:11 1931 7

原创 Flink教程(19) Flink架构 JobManager TaskManager Task SubTask Slot

Flink架构 JobManager TaskManager Task SubTask一、前言二、Flink架构1. JobManager1.1 JobMaster1.2 ResourceManager1.3 Dispatcher2. TaskManager2.1 Task和SubTask2.2 Slot 插槽一、前言最近发现玩游戏有点过头,夜里2点多还在玩,玩了一千多场亚瑟,拿到了第2次16.0分。感觉自己挺厉害,其实还是个菜。打算最近不能玩王者了,太容易上瘾,只要有时间控制不住的玩。而且我自己特别.

2021-03-29 20:01:49 1485 5

原创 Flink教程(18) Flink1.12.0 批流一体 setRuntimeMode(RuntimeExecutionMode.BATCH) 问题解决

一、问题在Flink1.12.0有个重要的功能,批流一体,就是可以用之前流处理的API处理批数据。只需要调用setRuntimeMode(RuntimeExecutionMode executionMode)。RuntimeExecutionMode 就是一个枚举,有流、批和自动。@PublicEvolvingpublic enum RuntimeExecutionMode { STREAMING, BATCH, AUTOMATIC; private Runtim

2021-03-29 10:02:46 213 1

原创 Elasticsearch教程(32) ES 聚合查询后过滤 Distinct Group By Having功能

一、之前写的关于ES聚合的博客Elasticsearch教程(3) ES聚合查询DSLElasticsearch教程(4) High Level REST Client API 查询 聚合 分组Elasticsearch教程(5) 指标聚合 SQL DSL JavaAPIElasticsearch教程(6) 桶聚合Query DSL-Terms AggregationElasticsearch教程(10) ES term terms prefix 搜索 聚合查询 详细总结Elasticsearc

2021-03-25 21:20:45 184

原创 Flink教程(17) Keyed State状态管理之AggregatingState使用案例 求平均值

Keyed State状态管理之AggregatingState使用案例 求平均值一、AggregatingState的方法二、AggregatingState描述器三、自定义的AggregateFunction类四、程序主体五、KeyedProcessFunction处理类一、AggregatingState的方法AggregatingState需要和AggregateFunction配合使用add()方法添加一个元素,触发AggregateFunction计算get()获取State的值

2021-03-23 18:15:28 174

原创 Flink教程(16) Keyed State状态管理之ReducingState使用案例 求最大值

Keyed State状态管理之ReducingState使用案例一、ReducingState的方法二、ReducingState的描述器三、程序主体四、KeyedProcessFunction处理类一、ReducingState的方法ReducingState是和ReduceFunction配合使用get() 获取状态的值add(IN value)方法添加一个元素,触发reduceFunction计算一次二、ReducingState的描述器ReducingState的描述器和之前Va

2021-03-23 17:42:13 117

原创 Flink教程(15) Keyed State状态管理之ListState使用 ValueState实现

Keyed State状态管理之ListState使用案例一、ListState的方法二、代码案例1. 需求2. 主体3. 处理方法4. 运行结果一、ListState的方法get()方法获取值add(IN value),addAll(List values)方法更新值update(List values) 用新List 替换 原来的Listclear() 清空List,List还存在,但是没有元素二、代码案例1. 需求记录每个人的历史操作信息,例如输入1,login1,buy

2021-03-23 15:16:58 160

原创 Flink教程(14) Keyed State状态管理之MapState使用案例

KeyedState状态之MapState使用案例一、MapState的方法二、定义MapStateDescriptor和获取MapState三、统计温度升高/降低超过阈值的次数一、MapState的方法MapState的方法和Java的Map的方法极为相似,所以上手相对容易。常用的有如下:get()方法获取值put(),putAll()方法更新值remove()删除某个keycontains()判断是否存在某个keyisEmpty() 判断是否为空二、定义MapStateDescr

2021-03-22 18:17:43 262

原创 Flink教程(13) Keyed State状态管理之ValueState的使用 温差报警

KeyedState状态之ValueState的使用 温差报警一、ValueState的方法二、实验案例1. 温度Bean2. 将字符串映射成SensorRecord对象3. ValueStateDescriptor描述器4. 程序主题5. KeyedProcessFunction处理数据流一、ValueState的方法ValueState的使用比较简单,方法如下图用ValueStateDescriptor定义ValueState的描述器value()方法获取值update(T value)方法

2021-03-22 17:07:44 192

原创 Flink教程(12) 两条流关联 window窗口的 join leftJoin使用案例

两条流关联 window窗口的 join leftJoin使用案例一、温度数据和实体类1. 温度数据2. 实体类3. 将字符串映射成SensorRecord对象二、window join1. 获取2条数据流2. join的代码3. KeySelector4. 设置join后的结果对象三、window left join1. left join主体代码2. MyCoGroupFunction一、温度数据和实体类1. 温度数据第一个是id,第二个四温度,第三个是事件事件1,20.5,2021-01-29

2021-03-19 17:51:10 155

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除