开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
1.背景
看到各路神仙,讲Java8,我都很喜欢,但是自己没讲过,那就不能算是讲烂了!
所以这一回,我们来个【版本任你发】系列作品,好,来个图!
我怎么讲呢?我没有什么规矩,我工作中怎么用的,我就怎么聊!我只聊用法,咱们风格就是大力出奇迹!开整!
2.like %whatever%这件小事
通常,我们非常喜欢写这样的代码:
String name = companyPageSO.getName();
if (StringUtils.isNotBlank(name)) {
companyPageSO.setName("%" + name + "%");
}
有些同志就说话了,我不是这么写,我是加一个util来干这个加%的事儿。
public static String wildcardLike(String columnValue) {
return "%" + columnValue + "%";
}
好,那现在代码就变成这样了:
String name = companyPageSO.getName();
if (StringUtils.isNotBlank(name)) {
companyPageSO.setName(SqlUtil.wildcardLike(name));
}
我敬你一杯,但是这个我也不想写,我 getter、setter 方法给它指定一下,这个代码的逻辑,我要封装,怎么搞?
你也许会说,这不可行吧?怎么能传递函数呢?其实我们在写 C++ 的时候经常传递函数指针和引用,怎么到了 Java 变成小绵羊了?在 JDK8 中,就给我们提供了 Function 家族,我们上面的代码,完全可以提取为一个通用的逻辑!
/**
* 若当前字符串非空,进行通配
*
* @param t 当前对象
* @param getter Getter 方法,例如 {@link A#getName()}
* @param setter Setter 方法,例如 {@link A#setName(String)}
* @param <T> 任意对象
*/
public static <T> void wildcardLikeWhenStringIsNotBlank(T t, Function<T, String> getter, BiConsumer<T, String> setter) {
if (t == null) {
return;
}
if (getter == null) {
return;
}
if (setter == null) {
return;
}
String str = getter.apply(t);
if (StringUtils.isNotBlank(str)) {
str = SqlUtil.wildcardLike(str);
setter.accept(t, str);
}
}
调用的时候,就是输入操作的对象和对应的函数。
SqlUtil.wildcardLikeWhenStringIsNotBlank(companyPageSO, CompanyPageSO::getName, CompanyPageSO::setName);
这种传递函数的感觉给我记住,给我拿捏!别说JAVA8不爱你!拼命封装吧!