前言
你是不是苦于ChatGPT GPT-4那么好用,可是自己没有账号,或者有账号还要花钱,花完钱还要另花一份“上网费”,不花钱的要不就是让你各种扫码关注公众号,要不就是非常慢、卡,用户体验非常差,用着用着还是换回了免费的度娘,今天推荐一个免费、国内非常快、不需要额外的“上网费”、而且功能非常强大的Idea ChatGPT CPT-4插件。到2023年7月28号亲测是可用的,后面怎么要就不知道了。
安装方法
Idea Plguins搜索chatgpt4 ,出现了一个ChatGPT GPT-4 小字Bito,下载量有33万了,点击安装后重启Idea
重启后点Idea右侧有个
</>
,点击然后按要求输出邮箱,接收到验证码后就注册好了,不需要什么“接码平台”,傻瓜式注册登录。账号注册后就可以输入对话了。这里有个问题,我问了它使用哪个GPT版本,它说是GPT-3,感觉有点奇怪,明明写的是GPT4。
替代搜索引擎
我相信很多人痛恨度娘已久,无奈没有好的免费替代产品,还是忍气吞声的继续用着,今天它来了!!!没有广告,还花不了你一分钱。它不再像搜索引擎那样前几条都给你牛皮癣广告了,至少现在是没有广告的,至于以后会不会让你先看几条广告,再给你答案这个就不好说了。
合成树测试
比如我们经常会写合成各种树,可以用递归或者循环,不经常写的人很有可能会写错,我们测试一下看看它能不能搞定
问题:
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求和,
生成的代码,也是一把过的
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,并且包含数字、字母、特殊字符串,并添加注释解释一下正则
生成随机数
使用JAVA写一个方法生成随机数,接收一个Int参数为返回随机数长度,返回String ,要求包含数字、字母、特殊字符串
只可惜这个测试用例没能通过,生成的随机数密码是正确的,正则是错误的。
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();
}
总结
Bito这个插件优化点是免费、速度快、网络全通,代码生成能力还是可以的,后期我还会测试更多的功能,不过不知道后面还能不能免费用了,趁着还可以免费用,大家赶快收藏使用吧!!!