collect补充
青年之文明,奋斗之文明也,与境遇奋斗,与时代奋斗,与经验奋斗。故青年者,人生,人生之春,人生之华也。——李大钊 书接上文,我们讲到并行流场景下三个参数的reduce会有一个坑 同理,在collect函数中也有这个坑 我们先使用普通流去做 123456789101112131415161718192021222324252627282930// 生成1-100List<Integer> list = Stream.iterate(1, i -> ++i).limit(200).collect(Collectors.toList());System.out.println(list);// 使用collect函数进行转换为List<Map<Integer,Integer>>,包含值和线程idList<Map<String, Object>> result = list.stream().collect(() -> { System.out.println("第一个参数:Supplie...
reduce补充二
人生要有意义只有发扬生命,快乐就是发扬生命的最好方法。——张闻天 关于reduce我已经写过博客了 今天最后再来聊一聊它的第三个重载 之前一直用得少,所以没有去探究它的妙用 最近稍微抽空看了下 发现还挺有意思的 例如它的第三个参数 在并行流的场景下同样的代码竟有不同的效果 如下: 123456789101112131415161718192021222324public static void main(String[] args) { sum(); parallelSum();}private static void sum() { List<Integer> list = Stream.generate(() -> 1).limit(100).collect(Collectors.toList()); System.out.println(list); int sum = list.stream().reduce(1, Integer::sum, (a, b) -> { ...
parallelStream
我又愿中国青年只是向上走,不必理会这冷笑和暗箭。——鲁迅 我们在开发中经常使用stream去处理我们的集合 这里分享一个并行流:parallelStream 它可以允许我们的声明式编程以多线程并行的方式执行 首先我们可以比较一下性能 1234567891011121314List<Integer> list = new SecureRandom().ints().limit(10000000).boxed().collect(Collectors.toList());long startTime = System.nanoTime();// 求和操作int sum = list.stream().mapToInt(Integer::intValue).reduce(0, Integer::sum);System.out.println("普通stream求和结果:" + sum);long normalStreamEndTime = System.nanoTime();System.out.println("普通stream耗时:&q...
redis的manager层应用
一身报国有万死,双鬓向人无再青。 —— 陆游 封装了一个操作redis的管理层,简单处理了缓存穿透、击穿、雪崩问题 Manager 12345678910111213141516171819202122232425package com.ruben.manager;import com.alibaba.fastjson.TypeReference;import java.util.function.Supplier;/** * redis管理层 * * @author <achao1441470436@gmail.com> * @since 2021/6/11 0011 21:55 */public interface RedisManager { /** * 从缓存中获取否则从mysql中查询 * * @param key 缓存中的key * @param mysqlSupplier 查询mysql操作 * @param typeReference 返回的类型 * @param ...
idea中的书签
我以为人们在每一个时期都可以过有趣而且有用的生活。我们应该不虚度一生,应该能够说,“我已经做了我能做的事”,人们只能要求我们如此,而且只有这样我们才能有一点欢乐——居里夫人 CTRL+F11可以选择添加书签 也可以CTRL+SHIFT+上述按键添加书签 例如CTRL+SHIFT+4效果如下 SHIFT+F11可以查看添加的书签 点击/回车可以跳转到对应的书签 也可以按CTRL+书签名跳转 例如CTRL+4 能直接从别的类跳转过来 也可以直接按F11添加匿名书签 以上添加书签的操作,可以再按一下取消 我们可以使用鼠标点击书签去添加描述 编辑的描述能在书签列表看到 这里我们可以按CTRL+A全选 然后按DELET实现全部删除
为什么总说不要循环调用dao
我要让全世界都记住我的温柔。——曼德拉 上次咱们测试过了单表多次查询和连表一次查询的性能比较 这次咱们又抽了点时间进行了一次 循坏调用dao查询性能测试 同样是那一百万条数据,最后测试结果出乎意料 123456789101112131415@Testpublic void cycleTest() { long startTime = System.nanoTime(); List<Film> films = filmMapper.selectList(Wrappers.lambdaQuery()); List<Map<String, Object>> collect = films.stream().map(film -> { Language language = languageMapper.selectById(film.getLanguageId()); Language language1 = languageMapper.selectById(film.ge...
isPrimitive
常制不可以待变化,一涂不可以应万方,刻船不以索遗剑。一一东晋·葛洪《抱朴子》 常制不可以待变化,一涂不可以应万方,刻船不以索遗剑。一一东晋·葛洪《抱朴子》 在Class中有这样一个函数isPrimitive 可以判断我们的class是否为基本类型 1234567891011121314151617181920212223242526package com.ruben;/** * @author <achao1441470436@gmail.com> * @since 2021/6/8 0008 22:00 */public class ClassDemo { public static void main(String[] args) { Class<Integer> integerClass = int.class; System.out.println("int.class是否为基本类型:" + integerClass.isPrimitive()); C...
idea启动时默认选择项目
决定我们成为什么样的人,不是我们的能力,而是我们的选择。——J·K·罗琳 取消此处的勾选即可 下次打开即会进入选择项目列表
uniapp微信小程序获取用户手机号
价值产生信心,信心产生热忱,而热忱则征服世界。——华特·H·柯亭姆 我们在uniapp开发中有时会需要获取用户的手机号 可以在官方文档找到对应的方法 这里注意一点,只能通过button进行点击获取 但我们这样获取到后还需要解密 比如我这里获取到的 123456789101112131415161718<template> <view><button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">点我获取手机号</button></view></template><script>export default { data() { return {}; }, methods: { getPhoneNumber(e) { console.log(e.detail.errMsg); console.log...
Json Web Token
我以为人们在每一个时期都可以过有趣而且有用的生活。我们应该不虚度一生,应该能够说,“我已经做了我能做的事”,人们只能要求我们如此,而且只有这样我们才能有一点欢乐——居里夫人 项目源码 校验逻辑如下: 我们客户端在每个需要登录的请求带着token访问我们的接口,在服务端的LoginInterceptor中进行校验token 登录逻辑如下: 1.登录校验用户名密码 2.生成token:通过jwt工具类,使用用户名和密码生成token,然后把token存redis,设置过期时间 刷新token逻辑如下: token过期后返回 “token过期对应的code”,客户端使用一个大于token过期时间的refreshToken去调用刷新token的接口,refreshToken通过校验之后,直接生成新的token 我这里设置的两倍,这样在超过token有效期一倍,小于两倍时,期间可以刷新token,再超时就需要重新登录了 项目大家可以拉下来玩一玩
