百度的【文言一心】阿里的【通义千问】及OpenApi的【chatGPT】对比
- 其他随笔
- 时间:2023-09-21 16:11
- 3030人已阅读
简介
这里凯哥就带大家对比下百度的【文言一心】阿里的【通义千问】及OpenApi的【chatGPT】对比。问题:Set<String> permissions = sysMenus.stream()  
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
这里凯哥就带大家对比下百度的【文言一心】阿里的【通义千问】及OpenApi的【chatGPT】对比。
问题:
Set<String> permissions = sysMenus.stream()
.map(SysMenu::getPerms)
.map(perm->{
if(StringUtils.isNotBlank(perm)){
return Arrays.asList(perm.trim().split(","));
}else{
return new ArrayList<>();
}
}).collect(Collectors.toSet()); 错误在哪里?怎么修改
先来看看百度【文心一言】的回答:

直接复制代码,发现错误。错误的地方是:
.flattening()这个函数不支持。
来看看阿里的【通义千问】的回答:
直接说这段代码没问题!!
最后我们来看看OpenApi的ChatGPT回答:

Set<String> permissions = sysMenus.stream()
.map(SysMenu::getPerms)
.map(perm -> {
if (StringUtils.isNotBlank(perm)) {
return Arrays.asList(perm.trim().split(","));
} else {
return new ArrayList<>();
}
})
.collect(Collectors.toSet());在这段代码中,您首先通过 sysMenus 集合创建了一个流,然后使用 map 函数将 SysMenu 对象的权限字段提取为字符串。接下来,您在每个权限字符串上应用了一个映射函数,该函数会检查权限字符串是否为空,然后将其拆分为逗号分隔的部分,然后将其转换为 List<String>。最后,您使用 collect 将这些权限集合收集到一个 Set<String> 中。
根据这个代码片段,有几个潜在的问题和改进点:
如果权限字符串为空(null 或空白),您将其映射为一个空的
ArrayList。这可能会导致最终permissions集合中包含空字符串,这可能不是您的期望结果。您可能希望在这种情况下直接过滤掉它们。如果权限字符串不为空,您将其拆分为一个
List<String>,然后将其添加到permissions集合中。但是,这可能会导致最终的permissions集合包含重复的权限字符串。您可能希望确保最终集合中没有重复的元素,这可以通过distinct()操作来实现。
基于上述考虑,您可以对代码进行如下修改:


Set<String> permissions = sysMenus.stream()
.map(SysMenu::getPerms)
.filter(StringUtils::isNotBlank) // 过滤掉空权限字符串
.map(perm -> Arrays.asList(perm.trim().split(",")))
.flatMap(List::stream) // 扁平化多个权限字符串的列表
.distinct() // 去除重复的权限字符串
.collect(Collectors.toSet());