首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【AI+编程】AI工具(通义灵码)编写yaml转换properties工具类思考

需求背景:由于公司安装的apollo比较老,虽然新版本已经支持yaml格式了,但升级apollo代价比较大,有个项目配置文件之前放在项目里基于yaml编写的,最近想切换到apollo存储配置文件。

【人工智能】为啥我最近很少写python编程文章了,浅谈AI+编程+RPA提升工作效率

 在这篇文章中, 我已经在IntelliJ IDEA2023.3.4 中安装好通义灵码,下面就以idea中的通义灵码为例。

最初我不假思索直接提问:  请用java语言生成yaml转换properties工具类,  最后的结果可想而知,没达到自己想要的效果。

问题1、properties生成格式不正确。期望yaml包含多层树形结构,要求生成的properties也要使用多层。

问题2、properties生成的顺序杂乱无章,期望按照yaml的顺序

问题3:yaml里包含注释,AI没考虑到注释情况

通过一步一步调教,最后得到可运行的代码。示例如下:

import org.yaml.snakeyaml.Yaml;import java.io.*;import java.nio.charset.StandardCharsets;import java.util.*;import org.yaml.snakeyaml.Yaml;

public class YamlToProps {

public static void main(String[] args) throws IOException {

String inputPath = "xxxx.yml"; String outputPath = "xxxx.properties";

convertYamlToProperties(inputPath, outputPath);

}

public static void convertYamlToProperties(String inputPath, String outputPath) throws IOException { // 读取 YAML 文件 Yaml yaml = new Yaml(); FileInputStream fis = new FileInputStream(inputPath); Reader reader = new InputStreamReader(fis, StandardCharsets.UTF_8); Map<String, Object> yamlContent = yaml.load(reader);

// 使用扩展的 Properties 类存储结构化数据 OrderedProperties props = new OrderedProperties();

// 遍历 YAML 内容并转换到 Properties 中 convertToProperties(yamlContent, "", props);

// 保存到 properties 文件 try (OutputStream output = new FileOutputStream(outputPath)) { props.store(output, null); } }

private static void convertToProperties(Map<String, Object> content, String prefix, OrderedProperties props) { for (Map.Entry<String, Object> entry : content.entrySet()) { String key = prefix.isEmpty() ? entry.getKey() : prefix + "." + entry.getKey(); Object value = entry.getValue();

if (value instanceof Map) { // 处理内嵌 Map 结构 convertToProperties((Map<String, Object>) value, key, props); } else if (value instanceof List) { // 如果值是列表,这里可以根据需求转换为逗号分隔的字符串或其他适合Properties的形式 // 示例:props.put(key, String.join(",", (List<String>) value)); } else { // 添加常规键值对 props.put(key, value.toString()); } } }

// 自定义扩展 Properties 类以保持顺序 static class OrderedProperties extends LinkedHashMap<String, String> {

public synchronized Enumeration<Object> keys() { return Collections.enumeration(new ArrayList<>(keySet())); }

public void store(OutputStream out, String comments) throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8)); if (comments != null && !comments.isEmpty()) { bw.write("# " + comments.replace("\n", "\n# ")); bw.newLine(); } for (Map.Entry<String, String> entry : this.entrySet()) { bw.write(entry.getKey() + "=" + entry.getValue()); bw.newLine(); } bw.flush(); } }}

代码生成好后,代码执行得到自己想要的工具类。

其实我们会发现, AI需要我们提供准确的话术才能一步步达到自己想要的结果,我们要对它提要求 和验收标准。 这就和产品经理给程序员提需求一样, 我们好比一个产品经理,AI工具相当于开发工程师, 如果产品经理提需求不具体,由于每个人的思维理解不一致(包括产品经理、开发工程师、测试工程师),可能做出来的东西和需求方不一样。需求细节沟通在项目整个过程中,真的很重要。

我最后想说,AI工具只是辅助, 我们的大脑思维才是 解决问题的关键。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OIZ2MyaZLD2NewaK1pLErSsQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券