CollUtil.join
时间: 2023-09-29 13:05:35 浏览: 78
CollUtil.join是一个集合工具类中的方法,它可以将集合中的元素按指定的分隔符连接成一个字符串。在使用该方法时,需要传入一个集合对象和一个分隔符作为参数。例如,在引用中的示例中,通过CollUtil.join方法将一个字符串数组和一个字符串列表分别连接成了以"#"和","为分隔符的字符串。
需要注意的是,CollUtil.join方法仅适用于集合中的元素是字符串类型或可转换为字符串类型的情况。如果集合中的元素是其他类型,需要先进行转换才能使用该方法。
另外,引用中的CollUtil.newArrayList方法可以用于创建一个ArrayList并填充元素,它可以接收任意数量的参数或一个数组作为参数。这个方法在使用CollUtil.join时可以用来创建示例中的字符串列表。
相关问题
List<ItyIotFdUser> list = this.list(new LambdaQueryWrapper<ItyIotFdUser>() .eq(ItyIotFdUser::getOpenId, req.getOpenId()) .eq(ItyIotFdUser::getUserType, req.getUserType()) ); if (CollUtil.isEmpty(list)){ return ""; } return list.stream().map(ItyIotFdUser::getOrgUid).collect(Collectors.joining(",")); 优化代码
这是一段 Java 代码,用于查询符合条件的 ItyIotFdUser 对象列表,并将它们的 OrgUid 属性拼接成一个字符串返回。如果列表为空,则返回空字符串。要优化这段代码,可以考虑以下几点:
1. 使用链式调用:LambdaQueryWrapper 提供了很多链式调用的方法,可以将多个条件组合在一起,这样代码更加简洁易读。例如,可以将两个 eq 方法合并成一个:
.eq(ItyIotFdUser::getOpenId, req.getOpenId())
.eq(ItyIotFdUser::getUserType, req.getUserType())
改为:
.eq(ItyIotFdUser::getOpenId, req.getOpenId(), ItyIotFdUser::getUserType, req.getUserType())
2. 使用 Optional 类型:如果查询结果为空,可以使用 Optional 类型来避免返回 null 值。例如:
Optional<List<ItyIotFdUser>> optionalList = Optional.ofNullable(this.list(wrapper));
return optionalList.map(list -> list.stream().map(ItyIotFdUser::getOrgUid).collect(Collectors.joining(","))).orElse("");
3. 使用 StringUtils 类:如果需要将多个字符串拼接成一个字符串,可以使用 StringUtils 类的 join 方法,这样代码更加简洁。例如:
return optionalList.map(list -> StringUtils.join(list.stream().map(ItyIotFdUser::getOrgUid).toArray(), ",")).orElse("");
优化这段代码:List<CompletableFuture<Map<String, Object>>> futureList = new ArrayList<>(); for (PersonBasicVo person : personList) { CompletableFuture<Map<String, Object>> future = CompletableFuture.supplyAsync(() -> { String personNo = person.getPersonNo(); List<ContactsBasic> contactsList = contactsService.list(Wrappers.lambdaQuery(ContactsBasic.class) .eq(ContactsBasic::getPersonNo, personNo) .ne(ContactsBasic::getRelationshipAccount, "") .isNotNull(ContactsBasic::getPersonNo) .like(StrUtil.isNotBlank(phone), ContactsBasic::getRelationshipAccount, phone)); if (CollUtil.isNotEmpty(contactsList)) { Map<String, Object> contactsMap = new HashMap<>(); contactsMap.put("personNo", personNo); contactsMap.put("contactsList", contactsList); return contactsMap; } else { return null; } }, executor); futureList.add(future); } List<Map<String, Object>> contactsMapList = futureList.stream() .map(CompletableFuture::join) .filter(Objects::nonNull) .collect(Collectors.toList());
优化后的代码如下:
```java
List<CompletableFuture<Map<String, Object>>> futureList = personList.stream()
.map(person -> CompletableFuture.supplyAsync(() -> {
String personNo = person.getPersonNo();
List<ContactsBasic> contactsList = contactsService.list(Wrappers.lambdaQuery(ContactsBasic.class)
.eq(ContactsBasic::getPersonNo, personNo)
.ne(ContactsBasic::getRelationshipAccount, "")
.isNotNull(ContactsBasic::getPersonNo)
.like(StrUtil.isNotBlank(phone), ContactsBasic::getRelationshipAccount, phone));
if (CollUtil.isNotEmpty(contactsList)) {
Map<String, Object> contactsMap = new HashMap<>();
contactsMap.put("personNo", personNo);
contactsMap.put("contactsList", contactsList);
return contactsMap;
} else {
return null;
}
}, executor))
.collect(Collectors.toList());
List<Map<String, Object>> contactsMapList = futureList.stream()
.map(CompletableFuture::join)
.filter(Objects::nonNull)
.collect(Collectors.toList());
```
主要优化:
1. 使用流式编程,替换原来的for循环。
2. 使用`stream()`和`collect(Collectors.toList())`方法来收集结果,代替手动添加到列表中。
3. 将lambda表达式内联,使代码更简洁。
阅读全文