百度的【文言一心】阿里的【通义千问】及OpenApi的【chatGPT】对比
- 其他随笔
- 时间:2023-09-21 16:11
- 2397人已阅读
简介
这里凯哥就带大家对比下百度的【文言一心】阿里的【通义千问】及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());