CodeGeeX学习

一、CodeGeeX简介

一款基于大模型的全能的智能编程助手。它可以实现代码的生成与补全、自动添加注释、代码翻译以及智能问答等功能,能够帮助开发者显著提高工作效率。CodeGeeX支持主流的编程语言,并适配多种主流IDE

智普清言: https://chatglm.cn/main/alltoolsdetail

1.支持语言

Python、Java、C++、JavaScript、TypeScript、Go、PHP、C#等常见编程语言。

2.支持IDE

Visual Studio Code及IntelliJ IDEA、PyCharm、WebStorm、Android Studio、GoLand、PhpStor 等常见IDE。

3.优点

  • 多语言支持:CodeGeeX支持超过100种编程语言,这使得它能够服务于广泛的开发者群体。

  • 强大的代码生成与补全能力:它可以自动生成代码片段,帮助开发者节省时间和减少错误。

  • 智能注释:CodeGeeX能够自动添加注释,提高代码的可读性和维护性。

  • 代码翻译:模型可以将代码从一种语言翻译成另一种,这对于需要在不同的编程语言之间切换的开发者来说非常有用。

  • 自然语言编程:通过支持自然语言输入,降低了编程的门槛,使得非专业开发者也能更加容易地进行编程。

  • 集成开发环境兼容性:CodeGeeX适配了多种主流IDE,使得开发者可以在熟悉的开发环境中使用它。

  • 持续迭代和更新:CodeGeeX不断进行模型的迭代和更新,以提高性能和增加新功能。

  • 用户基础广泛:拥有大量的个人用户,证明了其受欢迎程度和实用性。

  • 多功能性:除了基本的代码生成和补全,CodeGeeX还提供了代码解释器、联网搜索、工具调用等功能,增强了其实用性

  • 内网可用!

二、功能要点及举例

1.智能生成

1.1. 公共类方法智能生成

  • 生成公共方法-冒泡排序

输入:	//写一个方法,实线冒泡排序

---------------------------------------如下为生成部分----------------------------------------------------
public static void bubbleSort(int[] arr) {

    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
  • 生成公共方法-按行读取文件

输入:	//按行读取文件

---------------------------------------如下为生成部分----------------------------------------------------
public static void readFileByLine(String filePath) {

    try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1.2. 简单HTML智能生成

  • HTML-页面:

输入:
/**
创建一个网页,网页内容包含:
	1.网页名称:后台页面
	2.提交表单,采用ajax提交
		表单参数包含:
			店铺id:
				类型:字符串,
				字段:shopEntityId,
				示例值:123
			机构id:
				类型:字符串,
				字段:shopId,
				示例值:123
			执行时间:
				类型:时间(YYYY-MM-DD),
				字段:executeDate,
				示例值:2024-06-10
			UUID:
				类型:字符串,
				字段:uuid,
				示例值:20240715151900,按照当前时间自动生成
				规则:
		ajax提交按钮: 执行访问/test/test01接口提交如上参数,并弹窗显示接口响应
*/

---------------------------------------如下为生成部分----------------------------------------------------
<html>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

<head>
    <meta charset="UTF-8">

    <title>后台页面</title>

    <style>
        #uuid {
            display: none;
        }
    </style>

</head>
<body>
    <h1>后台页面</h1>
    <form id="myForm">

        <label for="shopEntityId">店铺id:</label>
            <input type="text" id="shopEntityId" name="shopEntityId" value="123"><br><br>

        <label for="shopId">机构id:</label>
            <input type="text" id="shopId" name="shopId" value="123"><br><br>

        <label for="executeDate">执行时间:</label>
            <input type="date" id="executeDate" name="executeDate" value="2024-06-10"><br><br>

        <input type="text" id="uuid" name="uuid" readonly><br><br>

        <button type="button" onclick="submitForm()">执行访问/test/test01接口提交</button>

    </form>
    <script>
        function generateUUID() {
            var date = new Date();
            var timestamp = Math.floor(date.getTime() / 1000);
            return timestamp;
        }

        function submitForm() {
            var uuid = generateUUID();
            $('#uuid').val(uuid);
            $.ajax({
                url: '/test/test01',
                type: 'POST',
                data: $('#myForm').serialize(),
                success: function(response) {
                    alert('接口响应: ' + response);
                }
            });
        }
    </script>
</body>
</html>

1.3. 代码-代码智能生成:

  • html生成controller:

输入:
/**
 *     <label for="shopEntityId">店铺id:</label>
 *     <input type="text" id="shopEntityId" name="shopEntityId" value="123"><br><br>
 *     <label for="shopId">机构id:</label>
 *     <input type="text" id="shopId" name="shopId" value="123"><br><br>
 *     <label for="executeDate">执行时间:</label>
 *     <input type="date" id="executeDate" name="executeDate" value="2024-06-10"><br><br>
 *     <input type="text" id="uuid" name="uuid" readonly><br><br>
 */

-------------------------------如下为生成部分-------------------------------------------------------
@Data
static class Test01 {
    String shopEntityId;
    String shopId;
    String executeDate;
    String uuid;
}

@PostMapping("/test/test01")
public String test01(Test01 test01) {
    return "success";
}

1.4. 实体类智能生成:

1.4.1. 生成class
输入:
//写一个class,属性包含姓名,年龄,性别,电话,邮箱,地址,身份证号,职业,收入,婚姻状况,教育程度,宗教信仰,家庭成员,子女数量,家庭成员关系,家庭成员职业,家庭成员收入,家庭成员婚姻状况,家庭成员教育程度,家庭成员宗教信仰,家庭成员子女数量,家庭成员家庭成员关系,家庭成员家庭成员职业,家庭成员家庭成员收入,家庭成员家庭成员婚姻状况,家庭成员家庭成员教育程度,家庭成员家庭成员

-------------------------------如下为生成部分-------------------------------------------------------

public class Person {
    private String name;
    private int age;
    private String gender;
    private String phone;
    private String email;
    private String address;
    private String idCard;
    private String occupation;
    private double income;
    private String maritalStatus;
    private String education;
    private String religion;
    private String familyMembers;
    private int numberOfChildren;
    private String familyMembersRelationship;
    private String familyMembersOccupation;
    private double familyMembersIncome;
    private String familyMembersMaritalStatus;
    private String familyMembersEducation;
    private String familyMembersReligion;
    private int familyMembersNumberOfChildren;

}
1.4.2. 生成enum
输入:
//产品服务一级分类enum:  1.终端产品、2.数据增值服务、3.运营产品、4.数字小产品、5.人工服务、6.维保及流量服务

-------------------------------如下为生成部分-------------------------------------------------------

enum ProductServiceCategory {
    TERMINAL_PRODUCT("1", "终端产品"),
    DATA_ADDITIONAL_SERVICE("2", "数据增值服务"),
    OPERATION_PRODUCT("3", "运营产品"),
    DIGITAL_TICKET_PRODUCT("4", "数字产品"),
    ARTIFICIAL_SERVICE("5", "人工服务"),
    MAINTENANCE_AND_FLOW_SERVICE("6", "维保及流量服务");

    private String code;
    private String name;

    ProductServiceCategory(String code, String name) {
        this.code = code;
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public String getName() {
        return name;
    }
}

1.5. SQL脚本生成:

输入:按照这个实体 ,帮我生成mysql的建表语句

输出:
CREATE TABLE Person (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT,
    gender VARCHAR(50),
    phone VARCHAR(20),
    email VARCHAR(255),
    address TEXT,
    idCard VARCHAR(20),
    occupation VARCHAR(255),
    income DOUBLE,
    maritalStatus VARCHAR(50),
    education VARCHAR(255),
    religion VARCHAR(255),
    familyMembers TEXT,
    numberOfChildren INT,
    familyMembersRelationship TEXT,
    familyMembersOccupation TEXT,
    familyMembersIncome DOUBLE,
    familyMembersMaritalStatus VARCHAR(50),
    familyMembersEducation VARCHAR(255),
    familyMembersReligion VARCHAR(255),
    familyMembersNumberOfChildren INT
);

输入:使用下划线命名方式

输出:
CREATE TABLE person (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT,
    gender VARCHAR(50),
    phone VARCHAR(20),
    email VARCHAR(255),
    address TEXT,
    id_card VARCHAR(20),
    occupation VARCHAR(255),
    income DOUBLE,
    marital_status VARCHAR(50),
    education VARCHAR(255),
    religion VARCHAR(255),
    family_members TEXT,
    number_of_children INT,
    family_members_relationship TEXT,
    family_members_occupation TEXT,
    family_members_income DOUBLE,
    family_members_marital_status VARCHAR(50),
    family_members_education VARCHAR(255),
    family_members_religion VARCHAR(255),
    family_members_number_of_children INT
);

2.智能补全

  • AI会学习你的代码习惯,然后帮你补全代码
  • AI会揣测代码上下文,然后帮你补全方法

2.1 按照返回值智能补全:

  • 按照返回值补全:

      public static void test0201() {
          List<Person1> list = new ArrayList<>();
          for (int i = 0; i < 20; i++) {
              //所有属性都放入随机值
              Person1 person1 = new Person1();
              person1.setName("张三" + i);
              person1.setAge(i);
              person1.setAddress("北京" + i);
              list.add(person1);
          }
          //过滤list,只保留age是5的倍数的
          list = list.stream().filter(person1 -> person1.getAge() % 5 == 0).collect(Collectors.toList());
          //----------------------------------如下为生成部分----------------------------------------------------
          List<String> names = list.stream().map(Person1::getName).collect(Collectors.toList());
          Map<String, Person1> map = list.stream().collect(Collectors.toMap(Person1::getName, person1 -> person1));
          Map<String, List<Person1>> map1 = list.stream().collect(Collectors.groupingBy(Person1::getName));
    
      }
    

2.2 理解上下文缺省智能补全:

  • 理解上下文按照所需方法补全:

      public class Test03 {
          public static void dataMovePerson1() {
              String name="lxh";
              List<Person1> personList = getPerson1(name);
              personList=filterPerson1(personList);
              boolean flag=savePerson1(personList);
          }
          //---------------如下为生成部分----------------
          public static void main(String[] args) {
              dataMovePerson1();
          }
          
          public static List<Person1> getPerson1(String name) {
                 //根据name查询person1表
                 return new ArrayList<>();
          }
          
          public static List<Person1> filterPerson1(List<Person1> personList) {
                 //根据条件过滤person1表
              return personList;
          }
          
          public static boolean savePerson1(List<Person1> personList) {
                  //保存person1表
              return true;
          }
      }
    

2.3 按照相似方法逻辑智能补全:

  • 按照相似方法逻辑补全:

      public class Test03 {
          public static void dataMovePerson1() {
              String name = "lxh";
              List<Person1> personList = getPerson1(name);
              personList = filterPerson1(personList);
              boolean flag = savePerson1(personList);
          }
    
          public static List<Person1> getPerson1(String name) {
              List<Person1> personList = new ArrayList<>();
              for (int i = 0; i < 20; i++) {
                  Person1 person1 = new Person1();
                  person1.setName(name);
                  person1.setAge(i);
                  personList.add(person1);
              }
              //根据name查询person1表
              return personList;
          }
      
          public static List<Person1> filterPerson1(List<Person1> personList) {
              //根据条件过滤person1表
              personList.stream().filter(person1 -> person1.getAge() > 10).collect(Collectors.toList());
              return personList;
          }
      
          public static boolean savePerson1(List<Person1> personList) {
              for (Person1 person1 : personList) {
                  //保存person1表
                  person1 = null;
              }
              //保存person1表
              return true;
          }
      
      	//-------------------------------如下为生成部分------------------------------------------
    
          public static void dataMoveStudent1() {	
              String name = "lxh";		
              List<Student1> studentList = getStudent1(name);		
              studentList = filterStudent1(studentList);		
              boolean flag = saveStudent1(studentList);
          }
      
          public static List<Student1> getStudent1(String name) {		
              List<Student1> studentList = new ArrayList<>();		
              for (int i = 0; i < 20; i++) {		
                  Student1 student1 = new Student1();
                  student1.setId(name);
                  student1.setAge(i);
                  studentList.add(student1);
              }
              return studentList;
          }
      
          public static List<Student1> filterStudent1(List<Student1> studentList) {
              //根据条件过滤student1表
              studentList.stream().filter(student1 -> student1.getAge() > 10).collect(Collectors.toList());
              return studentList;
          }
      
          public static boolean saveStudent1(List<Student1> studentList) {
              for (Student1 student1 : studentList) {
                  //保存student1表
                  student1 = null;
              }
              return true;
          }
      }
    

3.代码解读与分析

问答式解读,无需脱离ide,同时能够分析排查代码可能存在的风险漏洞,

3.1. 代码解读与风险分析示例

  • 原码

      public static void main(String[] args) {
          List<String> list1 = Arrays.asList("a", "b", "c");
          List<String> list2 =list1;
          list2.add("d");
          list2 = null;
          list2.forEach(System.out::println);
      }
    
  • 问答

      问:	帮我解释这段代码
    
    
      答:	
      这段Java代码主要演示了关于`List`接口和`Arrays.asList`方法的使用。下面是对代码的详细解释:
      
      1. **创建不可变列表**:
         ```java
         List<String> list1 = Arrays.asList("a", "b", "c");
         这行代码使用`Arrays.asList`方法创建了一个包含字符串"a", "b", "c"的列表`list1`。需要注意的是,`Arrays.asList`返回的列表是固定大小的,即不能添加或删除元素,但可以修改现有元素。
      
      2. **引用赋值**:
         
         ```java
         List<String> list2 = list1;
         ```
         这行代码将`list1`的引用赋值给`list2`,此时`list1`和`list2`指向同一个列表对象。
         
      3. **修改列表**:
         
         ```java
         list2.add("d");
         list2.add("e");
         ```
         尽管列表`list1`是不可变的,但`list2`和`list1`指向同一个列表对象,因此对`list2`的修改也会反映在`list1`上。这里,"d"和"e"被添加到了列表中。
         
      4. **将列表引用置为null**:
         ```java
         list2 = null;
         ```
         这行代码将`list2`的引用置为`null`,但`list1`仍然指向原来的列表对象。
      
      5. **遍历列表**:
         
         ```java
         list2.forEach(System.out::println);
         ```
         尽管此时`list2`已经被置为`null`,但由于`list2`和`list1`指向同一个列表对象,`list1`仍然包含修改后的元素。因此,这段代码会尝试遍历`list1`并打印出其中的元素:"a", "b", "c", "d", "e"。
      
      **注意事项**:
      - `Arrays.asList`返回的列表是固定大小的,不能添加或删除元素,但可以修改现有元素。
      - 对一个列表的修改会影响到所有引用该列表的变量,因为它们引用的是同一个列表对象。
      - 将列表引用置为`null`不会影响列表对象本身,但会断开引用,后续对`null`引用的任何操作都会抛出`NullPointerException`。
    

3.2. 代码修复建议

  • 原码同2.1

  • 问答:

      问:	修复不能添加删除元素的问题及空指针的问题
    
    
      答:
      这段代码的主要问题是尝试在`Arrays.asList`返回的固定大小列表上添加元素,这会导致`UnsupportedOperationException`。此外,尝试在`null`引用上调用`forEach`方法会导致`NullPointerException`。为了修复这些问题,我们需要在添加元素之前检查列表是否为`null`,并确保列表是可变的。以下是修复后的代码:
      
      ```JAVA
      public static void main(String[] args) {
          List<String> list1 = new ArrayList<>(Arrays.asList("a", "b", "c"));
          List<String> list2 = list1;
          if (list2 != null) {
              list2.add("d");
          }
          list2 = null;
          if (list1 != null) {
              list1.forEach(System.out::println);
          }
          if (list2 != null) {
              list2.forEach(System.out::println);
          }
      }
      ```
      
      在这个修复后的版本中,我们首先将`list1`初始化为一个可变的`ArrayList`,然后添加元素"b"到`list2`。在调用`forEach`方法之前,我们检查列表是否为`null`,以避免`NullPointerException`。这样,即使`list2`已经被设置为`null`,`list1.forEach`仍然可以正常工作,因为`list1`仍然指向原来的列表对象。
    

3.3. 代码重构建议

  • 原码

      public static double calculateTotalPrice(List<Map<String, Object>> items, double taxRate) {
          double total = 0;
          for (Map<String, Object> item : items) {
              if (item.get("category").equals("food")) {
                  total += (double) item.get("price") * (int) item.get("quantity");
              } else if (item.get("category").equals("electronics")) {
                  total += (double) item.get("price") * (int) item.get("quantity") * 1.1;
              } else if (item.get("category").equals("clothing")) {
                  total += (double) item.get("price") * (int) item.get("quantity") * 1.05;
              }
          }
          total += total * taxRate;
          return total;
      }
    
  • 问答

      问:	重构该方法
    
    
      答:
      这段代码的主要目的是计算一个购物车中所有商品的总价格,包括食品、电子产品和服装,并考虑税率。为了提高代码的可读性和可维护性,我们可以对代码进行重构。以下是重构后的代码:
      
      ```JAVA
      public static double calculateTotalPrice(List<Map<String, Object>> items, double taxRate) {
          double total = 0;
          for (Map<String, Object> item : items) {
              double price = (double) item.get("price");
              int quantity = (int) item.get("quantity");
              double categoryMultiplier = getCategoryMultiplier((String) item.get("category"));
              total += price * quantity * categoryMultiplier;
          }
          total += total * taxRate;
          return total;
      }
      
      private static double getCategoryMultiplier(String category) {
          switch (category) {
              case "food":
                  return 1.0;
              case "electronics":
                  return 1.1;
              case "clothing":
                  return 1.05;
              default:
                  throw new IllegalArgumentException("Unknown category: " + category);
          }
      }
    
      重构后的代码将计算类别乘数(`categoryMultiplier`)的逻辑提取到了一个单独的方法`getCategoryMultiplier`中,这样可以使主方法`calculateTotalPrice`更加简洁和易于理解。此外,使用`switch`语句代替多个`if-else`语句可以提高代码的可读性。
    

4.自动注释

选中代码–>CodeGeeX–>Generate Comment

  • 效果示例:

      public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
          // 创建 FastJsonHttpMessageConverter 对象
          FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
          // 创建 FastJsonConfig 对象
          FastJsonConfig config = new FastJsonConfig();
          // 设置序列化特性
          config.setSerializerFeatures(
                  SerializerFeature.PrettyFormat,
                  // 保留 Map 空的字段
                  SerializerFeature.WriteMapNullValue,
                  // 将 String 类型的 null 转成""
                  SerializerFeature.WriteNullStringAsEmpty,
                  // 将 Number 类型的 null 转成 0
                  SerializerFeature.WriteNullNumberAsZero,
                  // 将 List 类型的 null 转成 []
                  SerializerFeature.WriteNullListAsEmpty,
                  // 将 Boolean 类型的 null 转成 false
                  SerializerFeature.WriteNullBooleanAsFalse,
                  // 避免循环引用
                  SerializerFeature.DisableCircularReferenceDetect);
          // 设置 FastJsonConfig 对象
          converter.setFastJsonConfig(config);
          // 设置默认字符集
          converter.setDefaultCharset(StandardCharsets.UTF_8);
          // 创建 MediaType 列表
          List<MediaType> mediaTypeList = new ArrayList<>();
          // 解决中文乱码问题,相当于在 Controller 上的 @RequestMapping 中加了个属性 produces = "application/json"
          mediaTypeList.add(MediaType.APPLICATION_JSON);
          mediaTypeList.add(MediaType.MULTIPART_FORM_DATA);
          mediaTypeList.add(MediaType.valueOf("application/vnd.ms-excel"));
          mediaTypeList.add(MediaType.valueOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"));
          // 设置支持的 MediaType
          converter.setSupportedMediaTypes(mediaTypeList);
          // 将 converter 添加到 converters 列表中
          converters.add(converter);
      }
    

5.代码翻译

  • 原码:

      public class Test03 {
          public static void dataMovePerson1() {
              String name = "lxh";
              List<Person1> personList = getPerson1(name);
              personList = filterPerson1(personList);
              boolean flag = savePerson1(personList);
          }
      
          public static List<Person1> getPerson1(String name) {
              List<Person1> personList = new ArrayList<>();
              for (int i = 0; i < 20; i++) {
                  Person1 person1 = new Person1();
                  person1.setName(name);
                  person1.setAge(i);
                  personList.add(person1);
              }
              //根据name查询person1表
              return personList;
          }
      
          public static List<Person1> filterPerson1(List<Person1> personList) {
              //根据条件过滤person1表
              personList.stream().filter(person1 -> person1.getAge() > 10).collect(Collectors.toList());
              return personList;
          }
      
          public static boolean savePerson1(List<Person1> personList) {
              for (Person1 person1 : personList) {
                  //保存person1表
                  person1 = null;
              }
              //保存person1表
              return true;
          }
      
          public static void dataMoveStudent1() {
              String name = "lxh";
              List<Student1> studentList = getStudent1(name);
              studentList = filterStudent1(studentList);
              boolean flag = saveStudent1(studentList);
          }
      
          public static List<Student1> getStudent1(String name) {
              List<Student1> studentList = new ArrayList<>();
              for (int i = 0; i < 20; i++) {
                  Student1 student1 = new Student1();
                  student1.setId(name);
                  student1.setAge(i);
                  studentList.add(student1);
              }
              return studentList;
          }
      
          public static List<Student1> filterStudent1(List<Student1> studentList) {
              //根据条件过滤student1表
              studentList.stream().filter(student1 -> student1.getAge() > 10).collect(Collectors.toList());
              return studentList;
          }
      
          public static boolean saveStudent1(List<Student1> studentList) {
              for (Student1 student1 : studentList) {
                  //保存student1表
                  student1 = null;
              }
              return true;
          }
      }
    

5.1. JAVA转化为python示例

  • CodeGeeX—>代码翻译—>Python语言

class Test03:
    @staticmethod
    def data_move_person1():
        name = "lxh"
        person_list = Test03.get_person1(name)
        person_list = Test03.filter_person1(person_list)
        flag = Test03.save_person1(person_list)

    @staticmethod
    def get_person1(name):
        person_list = []
        for i in range(20):
            person1 = Person1()
            person1.name = name
            person1.age = i
            person_list.append(person1)
        return person_list

    @staticmethod
    def filter_person1(person_list):
        person_list = [person1 for person1 in person_list if person1.age > 10]
        return person_list

    @staticmethod
    def save_person1(person_list):
        for person1 in person_list:
            person1 = None
        return True

    @staticmethod
    def data_move_student1():
        name = "lxh"
        student_list = Test03.get_student1(name)
        student_list = Test03.filter_student1(student_list)
        flag = Test03.save_student1(student_list)

    @staticmethod
    def get_student1(name):
        student_list = []
        for i in range(20):
            student1 = Student1()
            student1.id = name
            student1.age = i
            student_list.append(student1)
        return student_list

    @staticmethod
    def filter_student1(student_list):
        student_list = [student1 for student1 in student_list if student1.age > 10]
        return student_list

    @staticmethod
    def save_student1(student_list):
        for student1 in student_list:
            student1 = None
        return True

5.2. JAVA转化为Go示例

  • CodeGeeX—>代码翻译—>Go语言

package main

import (
	"fmt"
)

type Person1 struct {
	Name string
	Age  int
}

type Student1 struct {
	ID   string
	Age  int
}

func dataMovePerson1() {
	name := "lxh"
	personList := getPerson1(name)
	personList = filterPerson1(personList)
	flag := savePerson1(personList)
	fmt.Println(flag)
}

func getPerson1(name string) []Person1 {
	personList := make([]Person1, 0)
	for i := 0; i < 20; i++ {
		person1 := Person1{
			Name: name,
			Age:  i,
		}
		personList = append(personList, person1)
	}
	return personList
}

func filterPerson1(personList []Person1) []Person1 {
	filtered := make([]Person1, 0)
	for _, person1 := range personList {
		if person1.Age > 10 {
			filtered = append(filtered, person1)
		}
	}
	return filtered
}

func savePerson1(personList []Person1) bool {
	for _, person1 := range personList {
		person1 = Person1{}
	}
	return true
}

func dataMoveStudent1() {
	name := "lxh"
	studentList := getStudent1(name)
	studentList = filterStudent1(studentList)
	flag := saveStudent1(studentList)
	fmt.Println(flag)
}

func getStudent1(name string) []Student1 {
	studentList := make([]Student1, 0)
	for i := 0; i < 20; i++ {
		student1 := Student1{
			ID:  name,
			Age: i,
		}
		studentList = append(studentList, student1)
	}
	return studentList
}

func filterStudent1(studentList []Student1) []Student1 {
	filtered := make([]Student1, 0)
	for _, student1 := range studentList {
		if student1.Age > 10 {
			filtered = append(filtered, student1)
		}
	}
	return filtered
}

func saveStudent1(studentList []Student1) bool {
	for _, student1 := range studentList {
		student1 = Student1{}
	}
	return true
}

func main() {
	dataMovePerson1()
	dataMoveStudent1()
}

6.测试类生成

选中代码–>CodeGeeX–>Generate Tests

  • 原码

public static List<Person1> filterPerson1(List<Person1> personList) {
    //根据条件过滤person1表
    personList.stream().filter(person1 -> person1.getAge() > 10).collect(Collectors.toList());
    return personList;
}
  • 单元测试

public static void main(String[] args) {
    // 测试用例1:过滤出年龄大于10的人
    List<Person1> personList1 = new ArrayList<>();
    personList1.add(new Person1("Alice", 15));
    personList1.add(new Person1("Bob", 8));
    personList1.add(new Person1("Charlie", 12));
    List<Person1> result1 = filterPerson1(personList1);
    assert result1.size() == 2;
    assert result1.get(0).getName().equals("Alice");
    assert result1.get(1).getName().equals("Charlie");

    // 测试用例2:过滤出年龄小于等于10的人
    List<Person1> personList2 = new ArrayList<>();
    personList2.add(new Person1("Alice", 15));
    personList2.add(new Person1("Bob", 8));
    personList2.add(new Person1("Charlie", 12));
    List<Person1> result2 = filterPerson1(personList2);
    assert result2.size() == 1;
    assert result2.get(0).getName().equals("Bob");

    // 测试用例3:列表为空
    List<Person1> personList3 = new ArrayList<>();
    List<Person1> result3 = filterPerson1(personList3);
    assert result3.size() == 0;

    // 测试用例4:列表中所有人年龄都大于10
    List<Person1> personList4 = new ArrayList<>();
    personList4.add(new Person1("Alice", 15));
    personList4.add(new Person1("Bob", 12));
    personList4.add(new Person1("Charlie", 11));
    List<Person1> result4 = filterPerson1(personList4);
    assert result4.size() == 3;
    assert result4.get(0).getName().equals("Alice");
    assert result4.get(1).getName().equals("Bob");
    assert result4.get(2).getName().equals("Charlie");

    // 测试用例5:列表中所有人年龄都小于等于10
    List<Person1> personList5 = new ArrayList<>();
    personList5.add(new Person1("Alice", 5));
    personList5.add(new Person1("Bob", 8));
    personList5.add(new Person1("Charlie", 10));
    List<Person1> result5 = filterPerson1(personList5);
    assert result5.size() == 0;

    System.out.println("All test cases pass");
}

三、安装使用的主要流程

ide–>File—>Plugins—>搜索CodeGeex---->安装—>登录

四、使用时的注意事项

五、问答交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值