1. scan用来跳出循环
下面是String源码中的应用,通过scan坐标,在符合条件下调到scan位置处。
scan: {
for (firstLower = 0 ; firstLower < len; ) {
int c = (int)value[firstLower];
int srcCount;
if ((c >= Character.MIN_HIGH_SURROGATE)
&& (c <= Character.MAX_HIGH_SURROGATE)) {
c = codePointAt(firstLower);
srcCount = Character.charCount(c);
} else {
srcCount = 1;
}
int upperCaseChar = Character.toUpperCaseEx(c);
if ((upperCaseChar == Character.ERROR)
|| (c != upperCaseChar)) {
break scan;
}
firstLower += srcCount;
}
return this;
}
2. BeanUtils.copyProperties(fromObject,toObject)
功能:将fromObject的字段值复制到toObject
这个方法很好用,解决我们很多不必要的代码。但是有个小技巧,这两个对象的字段数量可能不一样,需要复制的字段名称要一样,这样才能复制。有了和这个方法,就不需要我们一个一个的get() set() 方法了。
3. 关于使用mabatis分页,得到的结果转Dto
问题:
用mybatis实现分页后,因为是在持久层进行查询,由于泛型的关系,返回的Page格式,然而前段要获得数据有时远不止entity的字段,所以我们要自定义Dto来封装传到前段的数据,格式为 Page。问题来了,怎么进行转换呢?
关于Dto,可以看我这篇文章。后端传到前段数据Dto
代码如下
public Page<UserDto> findPage(PageVo pageVo) {
Page<UserEntity> page = new Page<UserEntity>(pageVo.getIndex(),pageVo.getSize());
Page<UserEntity> result = operatorTableTempMapper.selectPage(page,null);
//要封装的数据格式
Page<UserDto> resultDto= new Page<>();
//用list来存储每个Dto
List<UserDto> list= new ArrayList<>();
result.getRecords().forEach(data->{
UserDtodto= new UserDto();
//这里就用到了复制,尽量将两个类相同字段名称定义成一样
BeanUtils.copyProperties(data,dto);
if (data.getTableId()!=null && data.getTableId().length()>0) {
//这里就是对个别字段进行复制了,
dto.setUserName(UserMapper.selectById(data.getUserId()).getUserName());
}
list.add(dto);
});
//从新将结果组合成 Page<Dto>
resultDto.setRecords(list);
return resultDto;
}
基本就是这样了,以后用到mybatis/mybatis-plus分页,进行结果转换可以运用这一套代码。
4 多用lambda表达式
在我现在认识中,运用lambda表达式最多地方
- 遍历 Set和List集合
- lambda创建线程
// 遍历集合
List list= new ArrayList();
// 第一种:打印
list.forEach(System.out::println);
// 第二种,可以进行另外操作,在大括号中进行七大操作
list.forEach(data->{
})
// 创建线程
new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println("数字:"+ i);
}
}).start();
除了上面两种常见的用法,还有其他的
- 集合内元素排序
- 删除集合中某个元素
//3. 删除集合中国满足个条件的集合
lists.removeIf(data->data.getId()==1);
//4. 集合元素排序
lists.sort((a,b)->a.getAge()-b.getAge());
lists.forEach(data-> System.out.println("删除排序后:"+data));
代码集合
其实还有一个重要的应用,但我好像没用到,以后用到再说,有个概念
函数式接口:FunctionInterface
public class lambdaTest {
public static void main(String[] args) {
NoReturnNoParam noReturnNoParam=()->{
System.out.println("第一个lambdal表达式");
};
noReturnNoParam.method();
//1. 遍历集合
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
List<User> lists= new ArrayList<>();
for(int i=0;i<5;i++){
lists.add(new User(i,"固定的",i,"中国"));
}
lists.forEach(System.out::println);
//我比较常用的
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
lists.forEach(data->{
//在这里可以进行一些数据的封装
System.out.println("也可以打印:"+data);
});
//2. 创建线程
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
new Thread(()->{
for (int i=0; i<5; i++){
System.out.println("在这里搞事情:"+i);
}
}).start();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//3. 删除集合中国满足个条件的集合
lists.removeIf(data->data.getId()==1);
//4. 集合元素排序
lists.sort((a,b)->a.getAge()-b.getAge());
lists.forEach(data-> System.out.println("删除排序后:"+data));
}
}