百度的【文言一心】阿里的【通义千问】及OpenApi的【chatGPT】对比

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 其他随笔
  • 时间:2023-09-21 16:11
  • 2397人已阅读
简介 这里凯哥就带大家对比下百度的【文言一心】阿里的【通义千问】及OpenApi的【chatGPT】对比。问题:Set<String> permissions = sysMenus.stream()              

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

这里凯哥就带大家对比下百度的【文言一心】阿里的【通义千问】及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()); 错误在哪里?怎么修改

19e731c6ddb590b32dbfd064460301a1.png

先来看看百度【文心一言】的回答:

d29168b017323f61f4413e8a44cecbcf.png


直接复制代码,发现错误。错误的地方是:

.flattening()这个函数不支持。


来看看阿里的【通义千问】的回答:

24ef0b5bf90f23e836c23a9603b8810c.png直接说这段代码没问题!!


最后我们来看看OpenApi的ChatGPT回答:

7429b1499b84061e0bde62a7c6045ac2.png

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> 中。

根据这个代码片段,有几个潜在的问题和改进点:

  1. 如果权限字符串为空(null 或空白),您将其映射为一个空的 ArrayList。这可能会导致最终 permissions 集合中包含空字符串,这可能不是您的期望结果。您可能希望在这种情况下直接过滤掉它们。

  2. 如果权限字符串不为空,您将其拆分为一个 List<String>,然后将其添加到 permissions 集合中。但是,这可能会导致最终的 permissions 集合包含重复的权限字符串。您可能希望确保最终集合中没有重复的元素,这可以通过 distinct() 操作来实现。

基于上述考虑,您可以对代码进行如下修改:

b66aeb49fdcb9282446066332fc60b8c.png

79945c0f16d5339c24cf7e662379a8a6.png

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());

bff679d8834cfce5df69c768bed86736.png

TopTop