日常代码,以免忘记
文章目录
一:com.alibaba.fastjson的相关转换
一:利用 JSONObject 在 String 和实体类之间相互转换
实体类:User user = new User();
转String:String str = JSONObject.toJSONString(user);
转实体类:User user = JSONObject.parseObject(str,User.class);
使用场景:例如 一个对象的值 以String类型存入redis中,取出来以后,再把String类型的转换成对象
二:利用JSONArray把json格式的String转换为List<对象>
实体entity对象属性:
String code;
int number;
String格式的json:
String str = [{“code”:“red”,“number”:250},{“code”:“redTwo”,“number”:260}];
转换:
List list = JSONArray.parseArray(str, eneity.class);
三:List转JSON输出
System.out.println(JSONObject.toJSON(list));
System.out.println(JSON.toJSON(strBody));
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
//在idea里面格式化了,等同于 {"respCode": "0000","respMsg": "成功"}
String strBody = "{\"respCode\": \"0000\",\"respMsg\": \"成功\"}";
//可转成JSON数据,直接get某一个值
JSONObject jsonObject = JSONObject.parseObject(strBody);
//get值respCode,输出结果0000
String respCode = jsonObject.getString("respCode");
//输出不为空的json数据,空字段就不输出了(新增于20230906)
cn.hutool.json.JSONUtil.toJsonStr(dto);
四:List和Map之间数据转换
1:例如:库里面查询到的数据
List usList = userMapper.selectUser();
以userId为K,整个user对象为值,放入map
用集合的长度指定map的长度:CollectionUtils.seiz()
Map<Integer,User> usMap = new HashMap<>(CollectionUtils.seiz());
//循环放入
for(User us : usList){
usMap.put(us.getUserId, us);
}
//查询另一个用户助力表的数据。一个用户有多个人助力
List helpList = userHelpMapper.selectUserHelp();
for(UserHelp he : helpList ){
//根据助力表的userId(map的K)获取值
User userValue = usMap.get(he.getUserId);
userValue .setHelpCount(he.getHelpCount);
//查询到助力情况后,put进去,替换掉之前相同K里面的数据
usMap.put(he.getUserId, userValue);
}
//查询用户完成了哪些任务,这个方法通过switch语句可省去用SQL语句 横转竖 的麻烦。
//获取用户的任务完成情况
List taskList = userTaskMapper.selectUserTask();
for(UserTask taList : taskList ){
User userValue = usMap.get(taList.getUserId);
//任务码
String taskCode = taList.getTaskCode();
switch(taskCode){
case “任务码one”:
userValue.setTaskCodeOne(“任务完成”);
break;
case “任务码two”:
userValue.setTaskCodeTwo(“任务完成”);
break;
default:
break;
}
//任务组装以后,put进去,替换掉之前相同K里面的数据
usMap.put(he.getUserId, userValue);
}
//最后获取整个组装好的value值以后,返回一个list集合
List result = new ArrayList<>(usMap.values());
return result;
2:上面的List转Map 用流的方式
List usList = userMapper.selectUser();
//以userId为K,整个user对象为值,转map,
Map<Integer,User> usMap = usList.stream.collect(Collectors.toMap(User::getUserId,v ->v));
List转Map 当有两个相关联的表时,可以各查各的表,然后根据相关联的Id组装数据,见步骤1.
//用流得方式获取usList 里面所有得userId,转换成一个集合,批量查询相关联得数据库
Set idSet = usList.stream.map(User::getUserId).collect(Collectors.toSet);
//Mapper接口得写法
List selectUserTask(Set idSet);
//Mapper.xml写法 这个foreach标签是in(xxx,xxx,xx) 下面的是and的写法
<select id="getAllId" resultType="om.group.evaluationlicense.entity.UserTask" parameterType="java.util.Set">
select * from userTask
where UserId in
<foreach collection="collection" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
//List写法(新增于20240417)
mapper层
xml层
//sql: and(cust_label_id like concat(‘%’,‘xxx’,‘%’) or cust_label_id like concat(‘%’,‘xxx’,‘%’) )
(新增于20230705)
五:lambda基本用法
public static void main(String[] args) {
VerCode a = new VerCode("S", "a", 12);
VerCode aa = new VerCode("S", "b", 13);
VerCode bb = new VerCode("S", "c", 14);
VerCode b = new VerCode("H", "d", 15);
VerCode c = new VerCode("H", "e", 16);
List<VerCode> entities = Arrays.asList(a, b, c, aa, bb);
List<VerCode> list =
entities.stream().filter(e -> e.getCode().equals("S") && e.getAge() == 12).
collect(Collectors.toList());
System.out.println(list);
System.out.println(JSONObject.toJSON(list));
List<VerCode> codes = entities.stream().map(e -> {
e.setAge(e.getAge() + 1);
e.setCode(e.getCode().equals("S") ? "F" : "FF");
return e;
}).collect(Collectors.toList());
System.out.println("codes == " + codes);
List<String> str = Arrays.asList("abc", "def", "ghf");
List<String> collect = str.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
System.out.println(collect);
System.out.println(JSONObject.toJSON(collect));
}
//字段 String str = "1,5,7";转换成list
List<Long> idList = Arrays.stream("1,5,7".split(","))
.map(Long::valueOf).collect(Collectors.toList());
// str = “a,b,c”;
List<String> list1 = Arrays.asList(str.split(","));
//list去重:
List<String> abWeicheMqTemplateIdList = templatenolist.stream().distinct().collect(Collectors.toList());
//倒叙取最大
List<AbSignLogs> abSignLogsList = abSignLogsMapper.select(abSignLogs);
return abSignLogsList.stream()
.sorted(Comparator.comparing(AbSignLogs::getGmtCreated).reversed())
.findFirst()
.orElse(null);
查询一次表 list映射
先过滤,然后取时间最大的一条,赋值到另外一个对象里面(新增于20230717)
七:时间格式化
//Date类型的insureDate增加30天
DateTime dateTime = DateUtil.offsetDay(insureDate, 30);
//date转String 转换的日期格式为yyyy-MM-dd
String date = DateUtil.format(dateTime, cn.hutool.core.date。DatePattern.NORM_DATE_PATTERN);
//或者用这个(新增于20231008)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(cn.hutool.core.date。DatePattern.NORM_DATE_PATTERN);
//输出格式为20231008
String strdate = simpleDateFormat.format(new date);
//string转date类型
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String str = "2021-10-25";
Date parse = simpleDateFormat.parse(str);
//Long类型的时间戳转date
new Date(1633662511497L);
设置当天过期(新增于20230831)
八:简单的分批分页查询数据,几个关键词
//条数查询.
Integer count = abCompanyBillRepo.countByExample(companyBillDTO);
if (count == 0) {
return ResultBaseUtils.transSuccess(Lists.newArrayList(), companyBillDTO.getCurrentPage(), companyBillDTO.getLimit(),
count);
}
//查询次数
int queryNumber = count / 500 + 1;
//查询起始数
int startNumber = 0;
//分批查询组装,最后一起导出,每次查询500条
List<CompanyBillDTO> abCompanyBillPageRespVOList = Lists.newArrayList();
for (int i = 0; i < queryNumber; i++) {
log.info("总条数count:{},查询起始数startNumber:{},查询次数queryNumber:{}", count, startNumber, queryNumber);
companyBillDTO.setCurrentPage(startNumber);
companyBillDTO.setLimit(500);
//获取账单明细数据.
List<CompanyBillDTO> companyBillDTOList = abCompanyBillRepo.selectByPageExport(companyBillDTO);
//页面新增扩展字段信息组装
List<CompanyBillDTO> companyBillDTOS = this.addExtraColumn(companyBillDTOList);
abCompanyBillPageRespVOList.addAll(companyBillDTOS);
startNumber += 500;
}
九:关于第四条的简单用法
public List<CompanyBillDTO> addExtraColumn(List<CompanyBillDTO> companyBillDTOList) {
if (CollectionUtil.isEmpty(companyBillDTOList)) {
return new ArrayList<>();
}
List<CompanyBillDTO> companyBillDTOS = new ArrayList<>();
//获取渠道名称
List<Long> companyIds = companyBillDTOList
.stream()
.map(CompanyBillDTO::getCompanyId)
.collect(Collectors.toList());
AbCompanyDTO abCompanyDTO = new AbCompanyDTO();
abCompanyDTO.setCompanyIds(companyIds);
Map<Long, AbCompanyDTO> abCompanyDTOS = abCompanyRepo.selectByPageExample(abCompanyDTO)
.stream()
.collect(Collectors.toMap(AbCompanyDTO::getId, company -> company));
//获取支持人员
List<Long> ownerMembers = companyBillDTOList
.stream()
.map(CompanyBillDTO::getOwnerMember)
.collect(Collectors.toList());
AbMemberDTO abMemberDTO = new AbMemberDTO();
abMemberDTO.setOwnerMembers(ownerMembers);
Map<Long, AbMemberDTO> abMemberDTOMap = abMemberRepo.selectByPageExample(abMemberDTO)
.stream()
.collect(Collectors.toMap(AbMemberDTO::getId, member -> member));
//获取支持人员上级组织
List<Long> ownerOrgs = companyBillDTOList
.stream()
.map(CompanyBillDTO::getOwnerOrg)
.collect(Collectors.toList());
AbOrgDTO abOrgDTO = new AbOrgDTO();
abOrgDTO.setOwnerOrgs(ownerOrgs);
Map<Long, AbOrgDTO> abOrgDTOMap = abOrgRepo.selectByPageExample(abOrgDTO)
.stream()
.collect(Collectors.toMap(AbOrgDTO::getId, orgDO -> orgDO));
//获取保单号 这里先查个险。 后面再查寿险
List<String> orderNos = companyBillDTOList
.stream()
.map(CompanyBillDTO::getOrderNo)
.collect(Collectors.toList());
AbPolicyDTO abPolicyDTO = new AbPolicyDTO();
abPolicyDTO.setOrderNoList(orderNos);
Map<String, AbPolicyDTO> policyDTOMap = abPolicyRepo.selectByPageExample(abPolicyDTO)
.stream()
.collect(Collectors.toMap(AbPolicyDTO::getOrderNo, abPolicyDO -> abPolicyDO));
for (CompanyBillDTO companyBillDTO : companyBillDTOList) {
//来源.
if (StringUtils.isNotBlank(companyBillDTO.getSource())) {
companyBillDTO.setSourceName(AbCompanyBillSourceEnum.getName(companyBillDTO.getSource()));
}
//保单号
if (StringUtils.isNotBlank(companyBillDTO.getOrderNo())) {
//个险信息
AbPolicyDTO policyDTO = policyDTOMap.get(companyBillDTO.getOrderNo());
if (null != policyDTO && StringUtils.isNotBlank(policyDTO.getPolicyNo())) {
companyBillDTO.setPolicyNo(policyDTO.getPolicyNo());
} else {
//寿险信息 类型:income 1 收入 在保状态 查 寿险表,2支出 退保状态 查 保单批改表 ab_policy_endorsement
if ("1".equals(companyBillDTO.getIncome())) {
AbSxpoPolicyResp abSxpoPolicyResp = differentPolicyQuerySupport.querySxPolicyByOrderNo(companyBillDTO.getOrderNo());
if (null != abSxpoPolicyResp && StringUtils.isNotBlank(abSxpoPolicyResp.getPolicyNo())) {
companyBillDTO.setPolicyNo(abSxpoPolicyResp.getPolicyNo());
}
} else if ("2".equals(companyBillDTO.getIncome())) {
AbPolicyEndorsementDTO abPolicyEndorsementDTO = new AbPolicyEndorsementDTO();
abPolicyEndorsementDTO.setOrderNo(companyBillDTO.getOrderNo());
String policyNo = abPolicyEndorsementRepo.selectByPageExample(abPolicyEndorsementDTO)
.stream()
.findFirst()
.map(AbPolicyEndorsementDTO::getPolicyNo)
.orElse("");
companyBillDTO.setPolicyNo(policyNo);
}
}
}
//支持人员
if (null != companyBillDTO.getOwnerMember()) {
AbMemberDTO memberDTO = abMemberDTOMap.get(companyBillDTO.getOwnerMember());
if (null != memberDTO && StringUtils.isNotBlank(memberDTO.getMemberName())) {
companyBillDTO.setMemberName(memberDTO.getMemberName());
}
}
//组织名称
if (null != companyBillDTO.getOwnerOrg()) {
AbOrgDTO orgDTO = abOrgDTOMap.get(companyBillDTO.getOwnerOrg());
if (null != orgDTO && StringUtils.isNotBlank(orgDTO.getOrgName())) {
companyBillDTO.setOrgName(orgDTO.getOrgName());
}
}
//渠道名称
if (null != companyBillDTO.getCompanyId()) {
AbCompanyDTO companyDTO = abCompanyDTOS.get(companyBillDTO.getCompanyId());
if (null != companyDTO && StringUtils.isNotBlank(companyDTO.getCompanyName())) {
companyBillDTO.setCompanyName(companyDTO.getCompanyName());
}
}
companyBillDTOS.add(companyBillDTO);
}
return companyBillDTOS;
}
10:url占位符拼接
public static void main(String[] args) {
// https://m5-test2.zhonganib.com/py/signapplysms?orderNo=1&sign=2&openId=3
String url = "https://m5-test2.zhonganib.com/py/signapplysms?orderNo=%s&sign=%s&openId=%s";
String originUrl = String.format(url, "1","2","3");
System.out.println(originUrl);
//输出结果 https://m5-test2.zhonganib.com/py/signapplysms?orderNo=1&sign=2&openId=3
}
11:List转String并加入其他分隔符
```java
List<AbProductPackageDefDTO> value = resultBase.getValue();
List<Long> collect = resultBase.getValue()
.stream()
.map(AbProductPackageDefDTO::getId)
.collect(Collectors.toList());
String ids = "(" + StringUtils.join(collect, " OR ") + ")";
System.out.println(ids);
//输出的结果为
(1715 OR 1782 OR 1784 OR 1788 OR 1611 OR 1796 OR 1599 OR 1665)
//手机号带***
String str = "15048621771";
String replaceAll = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
//输出结果 150****1771
System.out.println(replaceAll);
//String转list
String str ="a,b,c";
List<String> split= Arrays.asList(str.split(","));
//策略模式map的定义
@Service
public class IssueManageService {
@Autowired
Map<String, IssueStrategyService> IssueMap = new ConcurrentHashMap<>();
public IssueStrategyService getIssueImpl(String key) {
IssueStrategyService healthPeriodWithholdService = IssueMap.get(key);
if (healthPeriodWithholdService == null) {
throw new RuntimeException("策略没有定义");
}
return healthPeriodWithholdService;
}
}
## 关于lambda的其他用法
https://www.cnblogs.com/JasonKong/p/11188704.html
http://www.zimug.com/java/%e6%81%95%e6%88%91%e7%9b%b4%e8%a8%80%e4%bd%a0%e5%8f%af%e8%83%bd%e7%9c%9f%e7%9a%84%e4%b8%8d%e4%bc%9ajava%e7%ac%ac6%e7%af%87%ef%bc%9astream%e6%80%a7%e8%83%bd%e5%b7%ae%ef%bc%9f%e4%b8%8d%e8%a6%81%e4%ba%ba/.html