函数的功能是将一组键值对批量赋值给Map中的键。在Java中,通常使用Map的put方法逐个将键值对赋值给Map,但在某些场景下,可能需要一次性将多个键值对赋值给Map。
函数功能:Map批量赋值
参数1:参数名称:target;参数类型:Map;参数描述:Map对象
参数2:参数名称:keyAndValue;参数类型:Object;参数描述:key值与value值,先后对应(key=2n,value=2n+1)
假设有一个订单系统,该系统需要根据用户提交的表单数据来创建订单。在这种情况下,可以使用上述Java函数来实现将表单数据批量赋值给订单对象的功能。
具体来说,当订单系统接收到用户提交的表单数据时,它可以调用上述Java函数,并将订单对象作为目标Map对象传递给函数。同时,将表单数据中的键值对作为参数传递给函数。函数会遍历键值对数组,并将每个键值对赋值给目标Map对象,即订单对象。
通过使用上述Java函数,订单系统能够方便地将用户提交的表单数据进行批量赋值,无需手动逐个设置订单对象的属性。这样可以提高开发效率和代码的可维护性,并确保订单对象与表单数据的一致性。
这个时候,你会如何实现该功能呢?手工编写?还是借助AI工具?
接下来我们来看看这2种方式是如何实现这一功能的,它们又有何优劣势呢?或许从对比分析中可以为你找到一把高效交付高质量代码的钥匙。
- 人工代码
@MethodDesc(desc = "Map批量赋值函数", params = {
@ParamDesc(name = "target", desc = "目标Map对象"),
@ParamDesc(name = "keyAndValue", desc = "key和Value参数")})
public static Map batchSetValue(Map target, Object... keyAndValue) {
try {
Object key = "";
int j = 2;
if (keyAndValue.length % j != 0) {
throw new FlowTaskException("传入的参数,key和value数量不一致,请自己检查");
}
for (int i = 0; i < keyAndValue.length; i++) {
if (i % j == 0) {
key = keyAndValue[i];
if (Objects.isNull(key) || !(key instanceof String)) {
throw new FlowTaskException("Map批量赋值异常,传入的key不是字符串类型或为空对象,请检查 key=" + key);
}
} else {
if (Objects.nonNull(keyAndValue[i]) && "null".equals(keyAndValue[i])) {
target.put(key, null);
} else {
target.put(key, keyAndValue[i]);
}
}
}
return target;
} catch (Exception e) {
throw e;
}
}
- 借助AI工具
通过使用飞算 SoFlu 软件机器人推出的专注AI生成Java函数的 FuncGPT(慧函数)试一下。仅用24秒,FuncGPT(慧函数)就自动生成以下代码:
// 类名:MapUtil
// 函数名:bulkAssignValues
// 函数功能:批量将键值对赋值给Map对象
// POM依赖包:
// <dependency>
// <groupId>org.apache.commons</groupId>
// <artifactId>commons-lang3</artifactId>
// <version>3.12.0</version>
// </dependency>
import org.apache.commons.collections4.MapUtils;
import java.util.Map;
public class MapUtil {
/**
* 批量将键值对赋值给Map对象
* @param target 目标Map对象
* @param keyAndValue 键值对,先后对应(key=2n,value=2n+1)
*/
public static void bulkAssignValues(Map<Object, Object> target, Object... keyAndValue) {
if (target == null) { // 检查目标Map是否为空
throw new IllegalArgumentException("Target Map cannot be null"); // 抛出异常,目标Map不能为空
}
if (keyAndValue == null || keyAndValue.length % 2 != 0) { // 检查键值对参数是否为空或键值对个数是否为偶数
throw new IllegalArgumentException("Invalid key-value pairs"); // 抛出异常,键值对参数不合法
}
for (int i = 0; i < keyAndValue.length; i += 2) {
Object key = keyAndValue[i];
Object value = keyAndValue[i + 1];
target.put(key, value); // 将键值对赋值给目标Map对象
}
}
}
// 函数示例
// 批量将键值对赋值给Map对象示例
// 入参:target,目标Map对象
// 入参:keyAndValue,键值对,先后对应(key=2n,value=2n+1)
// 调用示例:
// Map<String, Integer> targetMap = new HashMap<>();
// MapUtil.bulkAssignValues(targetMap, "key1", 1, "key2", 2, "key3", 3);
// System.out.println(targetMap);
// 输出结果:例如,将键值对赋值给Map对象,结果为:{key1=1, key2=2, key3=3}
// 则输出结果为:{key1=1, key2=2, key3=3}
以上对比可以看出:
人工代码 | FunGPT(慧函数) |
生成时间:2-3分钟 | 生成时间:24秒 |
可读性一般,命名注释欠佳 | 可读性更好,命名注解更加规范 函数名和代码注释能够更清晰地表达代码的功能。 |
方法较为繁琐 使用循环和判断语句手动处理键值对的赋值逻辑 | 方法更加简洁、精确 使用Apache Commons Collections工具库提供的方法简化了键值对的赋值过程,并且提供了更精确的参数类型 |
总结:FunGPT(慧函数)生成代码所使用的方法更加简洁、精确,且代码可读性更好 |
最后想说一句:AI技术席卷千行百业的当下, AI编程工具层出不穷,开发人员需要根据个人实际的需求选择合适的工具帮助自己提高工作效率,打破能力边界。
该工具免费使用链接:Java全自动开发工具: 新一代Java开发工具 | 可视化编辑 | 测试运维自动化