判断一个类是否另一个类的父类
任何教育都比不上灾难的教育。——英狄斯雷利 代码很简单 我们调用Class中isAssignableFrom函数来判断左边的类是否参数中这个类的超类(父类) 123456System.out.println(Collection.class.isAssignableFrom(List.class));System.out.println(Collection.class.isAssignableFrom(ArrayList.class));System.out.println(Collection.class.isAssignableFrom(Set.class));System.out.println(Collection.class.isAssignableFrom(HashSet.class));System.out.println(Collection.class.isAssignableFrom(Map.class));System.out.println(Collection.class.isAssignableFrom(HashMap.class)); 打印结...
一个学习设计模式的网站
智的人决不坐下来为失败而哀号,他们一定乐观地寻找办法来加以挽救——莎士比亚 就是这个网站啦 https://refactoringguru.cn/ 目录还是比较全的,包括有很多的例子 在我看来是干货满满啊~
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·罗琳 取消此处的勾选即可 下次打开即会进入选择项目列表
