maven指令
mvn clean package 依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install 依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段
mvn clean compile
0.
<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类
函数式编程
@FunctionalInterface
interface Converter<F, T> {
T convert(F from);
}
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
Integer converted = converter.convert("123");
System.out.println(converted); // 123
1.Stream流式
模板: strings.stream().filter/map/collect/sorted(? -> ?).collect(Collectors.toList()/.joining()/.toMap()/.groupingBy()) /.count() ;
list.foreach(System.out :: println);
map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数: map用集合转换
filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:
limit 方法用于获取指定数量的流。 以下代码片段使用 limit 方法打印出 10 条数据
sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:
anyMatch(),只要有一个元素匹配传入的条件,就返回 true。
allMatch(),只有有一个元素不匹配传入的条件,就返回 false;如果全部匹配,则返回true。
noneMatch(),只要有一个元素匹配传入的条件,就返回 false;如果全部匹配,则返回 true。
并行Streams 多个线程来操作Stream
values.parallelStream().sorted().count()
例子:
allRoleOfEmployee.getResultObj().stream().anyMatch(i -> i.getRoleId() == role);
Map<Integer, SalerSignInRelCount> onceHomeworkCountMap = onceHomeworkCountList.stream()
.collect(Collectors.toMap(SalerSignInRelCount::getStaffId, salerSignInRelCount -> salerSignInRelCount));
2.
@ControllerAdvice 全局捕获异常
3.
String :: new
interface PersonFactory<P extends Person> {
P create(String firstName, String lastName);
}
4. 三元式
BizPlatformTypeEnum platformTypeEnum = crmBizPlatform == null ?
BizPlatformTypeEnum.getByCode(loginEmployee.getMajorSubject()) : BizPlatformTypeEnum.getByCode(crmBizPlatform);
5.
泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用 add 方 法,而<? super T>不能使用 get 方法,作为接口调用赋值时易出错。
说明:扩展说一下 PECS(Producer Extends Consumer Super)原则:
第一、频繁往外读取内容的,适合用<? extends T>。
第二、经常往里插入的,适合用<? super T>。
6..数组 集合 相互转换
集合->数组 list.toArray(array)
类 Arrays.asList()把数组转换成集合,本质上返回对象是Arrays的内部类,只是转换接口,数据仍是数组。不能使用add remove clear方法
7.
不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator
方式,如果并发操作,需要对 Iterator 对象加锁
8.遍历map集合
使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。keySet遍历两次,消耗性能
9. boolean返回值
return a==b&&a==c;
10.查询模板
返回用Result模板接受
查询模板接口BizQueryTemplate()传入一个回调接口BizServiceCallback<T> T为doquery()返回结果类型
Result<List<AdUserDispatchedDto>> query =
BizQueryTemplate.query(new BizServiceCallback<List<AdUserDispatchedDto>>() {
@Override
public void checkParams() throws Exception {
}
@Override
public List<AdUserDispatchedDto> doQuery() throws Exception {
// 新老noteType的转化
List<Integer> noteTypeList = null;
if (noteType != null) {
noteTypeList = NewNoteType.val4Search(noteType);
}
return adUserInfoRepository.queryAccessibleAdUser(staffIdList, grade, operatorStaffId, noteTypeList,
System.currentTimeMillis(), queryCondition, source, orderType, pageNum, pageSize);
}
});
11.断言
Spring Assert 用于字符判断 否则抛出异常(自定义的异常)
Assert.notNull(Object object, "object is required") - 对象非空
Assert.isTrue(Object object, "object must be true") - 对象必须为true
Assert.notEmpty(Collection collection, "collection must not be empty") - 集合非空
Assert.hasLength(String text, "text must be specified") - 字符不为null且字符长度不为0
Assert.hasText(String text, "text must not be empty") - text 不为null且必须至少包含一个非空格的字符
Assert.isInstanceOf(Class clazz, Object obj, "clazz must be of type [clazz]") - obj必须能被正确造型成为clazz 指定的类
12.BigDecimal
BigDecimal进行截断和四舍五入可用setScale方法
new BigDecimal("4.278").setScale(3,RoundingMode.HALF_UP); //保留三位小数,四舍五入
13.非空判断
数组 groupIds[] (groupIds != null && groupIds.length > 0)
字符串 StringUtils.isEmpty("") StringUtils.isNotEmpty(); StringUtils.isBlank(""); //是否为空长度为0或者空白符
集合 CollectionUtils.isNotEmpty(list);
数字 NumberUtils.isNumber(); //判断是否为数字
14. Duplicate 冲突
15.SQL语句
select
case when (p.gid>0 or rscu.user_id>0) then 1 else 0 end as introduction
from 表名
模糊查询: and u.nick_name like concat('%',#{nickName},'%')
16.boolean的结果 可以通过判断相关联
boolean hasLeadingPlusSign = start == 1 && chars[0] == '+';
17. 根据传入的类型 找到所有该类型的类的集合
ApplicationContext.getBeansOfType(Class<T> clazz); return Map<String,T>
18. JSON数据转化成对应的类
JSON.parseObject(hit.getSourceAsString(), UserExtDo.class)
19.三元式
sb.append(e == this ? "(this Collection)" : e);
20.
HashMap 使用 HashMap(int initialCapacity) 初始化, 正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loader
factor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)
21.遍历Map
// 传统的Map迭代方式
for (Map.Entry<String, Object> entry : infoMap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
// JDK8的迭代方式
infoMap.forEach((key, value) -> {
System.out.println(key + ":" + value);
});