如何使用Ai工具提升你的代码编写效率

前言

你和优秀的人之前只是差了一些工具而已,有时候自己埋头干了好几天,发现别人使用工具分分种就搞定的,随着各种AI工具的兴起,我们更需要关注那些能提升我们工作效率的工具,本文介绍一个Idea插件,可以大大提高你的编辑效率的工具。

安装方法

重启后点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,并且包含数字、字母、特殊字符串,并添加注释解释一下正则

扫描二维码关注公众号,回复: 15968573 查看本文章

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

猜你喜欢

转载自blog.csdn.net/whzhaochao/article/details/131975308