免费有网就能用的Idea插件ChatGPT GPT-4大杀器推荐

368 阅读3分钟

前言

你是不是苦于ChatGPT GPT-4那么好用,可是自己没有账号,或者有账号还要花钱,花完钱还要另花一份“上网费”,不花钱的要不就是让你各种扫码关注公众号,要不就是非常慢、卡,用户体验非常差,用着用着还是换回了免费的度娘,今天推荐一个免费、国内非常快、不需要额外的“上网费”、而且功能非常强大的Idea ChatGPT CPT-4插件。到2023年7月28号亲测是可用的,后面怎么要就不知道了。

安装方法

Idea Plguins搜索chatgpt4 ,出现了一个ChatGPT GPT-4 小字Bito,下载量有33万了,点击安装后重启Idea

image.png 重启后点Idea右侧有个</>,点击然后按要求输出邮箱,接收到验证码后就注册好了,不需要什么“接码平台”,傻瓜式注册登录。账号注册后就可以输入对话了。这里有个问题,我问了它使用哪个GPT版本,它说是GPT-3,感觉有点奇怪,明明写的是GPT4。

image.png

替代搜索引擎

我相信很多人痛恨度娘已久,无奈没有好的免费替代产品,还是忍气吞声的继续用着,今天它来了!!!没有广告,还花不了你一分钱。它不再像搜索引擎那样前几条都给你牛皮癣广告了,至少现在是没有广告的,至于以后会不会让你先看几条广告,再给你答案这个就不好说了。

合成树测试

比如我们经常会写合成各种树,可以用递归或者循环,不经常写的人很有可能会写错,我们测试一下看看它能不能搞定

image.png 问题:

public class Menu {
    private Long id;
    private Long parentId;
    private String name;
    private List<Menu> subMenus;
}
现在有个  List<Menu>menus对象,请帮我parentId是其父id,请将这些对象合成一个树,将子menus放入subMenus对象中

生成的代码,稍加修改,这将是通过了


package com.test.jdk11.testunicode;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description: TODO
 * @Author 赵侠客
 * @Date 2023/7/28
 **/

public class Menu {
  
    private Long id;
    private Long parentId;
    private String name;
    private List<Menu> subMenus;
    
    public static void main(String[] args) {
        List<Menu> menus=new ArrayList<>();
        menus.add(new Menu(1L,null,"一级"));
        menus.add(new Menu(2L,1L,"一级"));
        menus.add(new Menu(3L,1L,"一级"));
        menus.add(new Menu(4L,3L,"一级"));
        menus.add(new Menu(5L,4L,"一级"));
        List<Menu> tree = buildTree(menus);
        System.out.println(JSON.toJSONString(tree));

    }
    public static List<Menu> buildTree(List<Menu> menus) {
        Map<Long, Menu> menuMap = new HashMap<>();
        List<Menu> rootMenus = new ArrayList<>();
        // 将所有的菜单对象放入 map 中,以便后续构建树形结构
        for (Menu menu : menus) {
            menuMap.put(menu.getId(), menu);
        }
        // 遍历菜单对象,将子菜单放入对应的父菜单的 subMenus 属性中
        for (Menu menu : menus) {
            Long parentId = menu.getParentId();
            if (parentId == null) {
                // 如果 parentId 为空,则将该菜单对象作为根节点
                rootMenus.add(menu);
            } else {
                // 如果 parentId 不为空,则将该菜单对象放入对应的父菜单的 subMenus 中
                Menu parentMenu = menuMap.get(parentId);
                if (parentMenu != null) {
                    if (parentMenu.getSubMenus() == null) {
                        parentMenu.setSubMenus(new ArrayList<>());
                    }
                    parentMenu.getSubMenus().add(menu);
                }
            }
        }
        return rootMenus;
    }
}

测试lambda表达式

测试问题:

public class TenantBucketSize { 
    private Long tenantId; 
    private String day; 
    private Long size; 
} 
现有List<TenantBucketSize >请根据tenantId分组后再根据day分组按day正序,最后将size求和,

image.png

生成的代码,也是一把过的

public class TenantBucketSize {
    private Long tenantId;
    private String day;
    private Long size;


    public static Map<Long, Map<String, Long>> calculateTotalSize(List<TenantBucketSize> tenantBucketSizes) {
        return tenantBucketSizes.stream()
                .collect(Collectors.groupingBy(TenantBucketSize::getTenantId,
                        Collectors.groupingBy(TenantBucketSize::getDay,
                                Collectors.summingLong(TenantBucketSize::getSize))));
    }

    public static void main(String[] args) {
        List<TenantBucketSize> tenantBucketSizes=new ArrayList<>();
        tenantBucketSizes.add(new TenantBucketSize(1L,"2023-07-08",1L));
        tenantBucketSizes.add(new TenantBucketSize(1L,"2023-07-08",2L));
        tenantBucketSizes.add(new TenantBucketSize(1L,"2023-07-09",3L));
        tenantBucketSizes.add(new TenantBucketSize(2L,"2023-07-08",6L));
        tenantBucketSizes.add(new TenantBucketSize(3L,"2023-07-09",8L));
        System.out.println(JSON.toJSONString(calculateTotalSize(tenantBucketSizes)));
    }

正则表达式生成

正则表达式每个人应该都会一点,但是真要自己写时,比较复杂的表达式大部分还是要搜索的

使用JAVA写一个方法,接收String,返回Boolen,使用正则表达式检测密码长度必须 大于8,并且包含数字、字母、特殊字符串,并添加注释解释一下正则

image.png

生成随机数

使用JAVA写一个方法生成随机数,接收一个Int参数为返回随机数长度,返回String ,要求包含数字、字母、特殊字符串

image.png

只可惜这个测试用例没能通过,生成的随机数密码是正确的,正则是错误的。


 public static void main(String[] args) {
        for(int i=9;i<15;i++){
            for(int j=0;j<100;j++){
                String password=generateRandomString(i);
                System.out.println(password+":密码强:"+validatePassword(password));
            }
        }
    }
    private static final String CHARACTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()";
        public static boolean validatePassword(String password) {
            // 正则表达式解释:
            // ^               开始
            // (?=.*[0-9])     必须包含至少一个数字
            // (?=.*[a-zA-Z])  必须包含至少一个字母
            // (?=.*[@#$%^&+=]) 必须包含至少一个特殊字符(可以根据需要添加或修改特殊字符)
            // (?=\S+$)        不包含空格
            // .{8,}           长度至少为8个字符
            // $               结束
            String regex = "^(?=.*\\d)(?=.*[a-zA-Z])(?=.*[@#$%^&+=]).{8,}$";            return Pattern.matches(regex, password);
        }
        public static String generateRandomString(int length) {
            SecureRandom random = new SecureRandom();
            StringBuilder sb = new StringBuilder(length);
            for (int i = 0; i < length; i++) {
                int randomIndex = random.nextInt(CHARACTERS.length());
                char randomChar = CHARACTERS.charAt(randomIndex);
                sb.append(randomChar);
            }
            return sb.toString();
        }

image.png

总结

Bito这个插件优化点是免费、速度快、网络全通,代码生成能力还是可以的,后期我还会测试更多的功能,不过不知道后面还能不能免费用了,趁着还可以免费用,大家赶快收藏使用吧!!!