Collectors.toMap的对null友好实现
发表于|更新于
|浏览量:
令她反感的,远不是世界的丑陋,而是这个世界所戴的漂亮面具。——《不能承受的生命之轻》
我们在使用toMap时如果遇到null元素,经常会导致我们发生npe
很不方便
于是我给hutool提交了一个PR
完美解决了这个问题
使用方式:
升级到hutool-5.7.20
然后使用CollectorUtil
1 | Map<String, Integer> collect = Arrays.asList("ruben", "a chao", "vampire", "RUBEN", "VAMPIRE", null).stream().collect(CollectorUtil.toMap(Function.identity(), String::length, (l, r) -> l)); |
即可
相关推荐
2021-08-23
mybatis-plus的select函数
学问是异常珍贵的东西,从任何源泉吸收都不可耻。——阿卜·日·法拉兹 在mybatis-plus的条件构造器中如果我们想要过滤字段,则可以使用select函数 官方文档介绍如下: 这里分为两类,其中第一个例子:select("id", "name", "age")可以用于一般Wrapper 如果是lambdaQueryWrapper,则需要使用lambda,例如 1Wrappers.lambdaQuery(UserDetail.builder().build()).select(UserDetail::getUsername,UserDetail::getAvatar) 第二类,我们可以按照某种规则去匹配 例如这里我只要password以外的字段 写法如下: 1Wrappers.lambdaQuery(UserDetail.builder().build()).select(tableFieldInfo -> !tableFieldInfo.getProperty().equals(PropertyNamer...
2021-03-14
fastJson的JSONField注解
真正的快乐是内在的,它只有在人类的心灵里才能发现。——布雷默 相信关于FastJson大伙都不陌生 今天聊聊fastjson的这个注解@JSONField 首先它可以放到方法上 例如我们pojo的getter和setter等 其次用的最多的是放到属性上 例如我这里新建一个POJO 12345678910111213@Data@Builder@NoArgsConstructor@AllArgsConstructorprivate static class Student implements Serializable { private static final long serialVersionUID = -3289647584974663707L; private String name; private Integer age; private String job; private GenderEnum gender; private Date birthday; private String json;}...
2024-05-04
未来或将用Markdown写JavaDoc
当囊空如洗时才开始节约的话,那就为时太晚了。——塞内加 提案链接:JEP 467: Markdown Documentation Comments 1995 年的 HTML 写 JavaDoc 到现在已经快过时啦,于是 Jonathan Gibbons 提议用 Markdown 写 JavaDoc。目前这个提议在“Proposed to Target”状态,根据社区反响,这个提议很大概率能在 Java SE 23 版本中发布。 新的文档注释将使用 /// 而不是传统的 /** ... */。这样做的好处是: 避免了在文档注释中使用传统注释(如 /*...*/)可能引发的问题。 消除了使用星号的传统注释可能带来的 Markdown 语法冲突。 下面的 JavaDoc 和 Markdown 版本的文档注释对比。 JavaDoc 版本: 1234567/** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as t...
2020-06-10
一行代码搞定中文姓名排序
上码! 两个参数分别为:一个字符串数组、一个接收比较器,以确定所述阵列的顺序 Collator是一个抽象基类,子类实现特定的整理策略。 1Arrays.sort(names, Collator.getInstance(java.util.Locale.CHINA)); 完整代码如下: 12345String[] names = {"张三", "李四", "王五", "赵六", "狂神", "阿超"}; Arrays.sort(names, Collator.getInstance(java.util.Locale.CHINA)); for (String name : names) { System.out.println(name); } 输出结果: 123456阿超狂神李四王五张三赵六
2023-04-24
通过getter获取setter函数
勤劳的家庭,饥饿过其门而不入。——富兰克林 分享一个通过getter获取setter函数 放在:https://gitee.com/dromara/stream-query 1234567891011121314151617181920212223242526/** * 通过getter获取setter * * @param getter getter对应的lambda * @param <T> getter参数类型 * @param <R> property类型 * @return 返回setter对应的lambda */public static <T, R> SerBiCons<T, R> getSetter(SerFunc<T, R> getter) { return getSetter(getter, SerBiCons.class);}/** * 通过getter获取setter * * @param getter getter对应的lambda * @param...
2020-09-28
java多次调用,最后一次调用后才执行
追求使你充实,成功和失败都是伴奏。——史铁生 前段时间写了java防抖,不过之前写的都是在一定时间内只执行一次,超过这个时间,防抖又失效了,假设我现在有这样一个需求: 在一定的间隔内多次调用一个函数,只有最后一次才生效 例如,我设定的间隔为1秒,那么只要我在1秒内触发了第二次,那么就重新计时 废话不多说,贴代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859package com.ruben;import com.ruben.utils.TimeUtil;import java.util.Timer;import java.util.TimerTask;import java.util.logging.Handler;import java.util.logging.LogRecord;/** * @ClassName: TimeIsExpensiveDemo * @Date: 2020/9/28 21:3...

阿超
我的名字叫阿超 年龄25岁 家在北京市 职业是软件开发 每天最晚也会在八点前回家 不抽烟 酒浅尝辄止 晚上十二点上床 保证睡足八个小时 睡前写一篇博客 再做二十分钟俯卧撑暖身 然后再睡觉 基本能熟睡到天亮 像婴儿一样不留下任何疲劳和压力 就这样迎来第二天的早晨 健康检查结果也显示我很正常 我想说明我是一个不论何时都追求内心平稳的人 不拘泥于胜负 不纠结于烦恼 不树立使我夜不能寐的敌人 这就是我在这社会的生活态度
Follow Me公告
This is my Blog