custSex = StringUtils.equals(custSex, "M") ? "1" : StringUtils.equals(custSex, "F") ? "0" : StringUtils.equalsAny(custSex, "0", "1") ? custSex : "";
时间: 2023-07-24 19:16:18 浏览: 120
这行代码是一个条件表达式,根据`custSex`的值来进行判断和赋值操作。如果`custSex`等于"M",则将其赋值为"1";如果`custSex`等于"F",则将其赋值为"0";如果`custSex`等于"0"或"1",则将其保持不变;否则,将其赋值为空字符串""。这段代码使用了`StringUtils`工具类中的一些方法来进行字符串比较和赋值操作。
相关问题
List<DomainInfo> newData = new ArrayList<>(); for(DomainInfo info : data){ String subCode = info.getSystemCode(); if(subCode.contains(";")){ String[] code = subCode.split(";"); if(StringUtils.equals(dto.getSystemCode(), code[0])){ info.setSystemCode(StringUtils.isBlank(code[1]) ? "-" : code[1]); info.setChineseName(StringUtils.isBlank(info.getChineseName()) ? "空值" : info.getChineseName()); newData.add(info); } } }
这段代码的作用是,将一个 DomainInfo 对象的 List 集合 data 中的元素进行处理,筛选出符合条件的元素,然后加入到一个新的 List 集合 newData 中。具体实现过程如下:
1. 创建一个新的空的 List 集合 newData。
2. 对 data 集合中的每个 DomainInfo 对象进行遍历。
3. 从当前 DomainInfo 对象中获取系统代码 subCode,如果 subCode 中包含分号 ";",则说明这个系统代码包含了两个部分,需要进行拆分。
4. 使用 split() 方法将 subCode 拆分成两个部分,存储在数组 code 中。
5. 如果拆分后的第一个部分与传入的系统代码 dto.getSystemCode() 相等,则说明这是符合条件的元素。
6. 将第二个部分 code[1] 赋值给当前 DomainInfo 对象的系统代码属性 info.setSystemCode(),如果 code[1] 为空,则将 "-" 赋值给系统代码属性。
7. 如果当前 DomainInfo 对象的中文名称属性 info.getChineseName() 为空,则将 "空值" 赋值给该属性。
8. 将当前处理过的 DomainInfo 对象添加到新的 List 集合 newData 中。
9. 遍历结束后,返回新的 List 集合 newData,其中包含了符合条件的 DomainInfo 对象。
List<SchemaRowFilterCondition> schemaRowFilterConditions = JSONObject.parseArray(filterConditionList, SchemaRowFilterCondition.class); for (SchemaRowFilterCondition schemaRowFilterCondition : schemaRowFilterConditions) { String field = schemaRowFilterCondition.getField(); String camel = underlineToCamel(field); String key = schemaRowFilterCondition.getKey(); Field fieldsAndParentsField = fieldStream .filter(f -> StringUtils.equals(f.getName(), camel)) .findFirst() .orElseThrow(() -> new CustomException("大马猴来了", code)); Field f = object.getClass().getDeclaredField(camel); f.setAccessible(true); Object value = f.get(object); if (StringUtils.equals(key, value.toString()) && schemaRowRuleEo.getRowEditPermission()) { System.out.println("修改成功"); } else { throw new CustomException("大马猴来了", code); } }帮我优化代码
以下是对代码的优化建议:
1. 如果 `filterConditionList` 可能为空,需要在解析前进行非空判断。
2. 将对象的所有字段名转换为驼峰命名法,可以在对象初始化时进行,避免在循环中反复转换。
3. 将字段名与过滤条件的匹配逻辑抽离成一个方法,减少重复代码。
4. 将异常信息的文本提取成常量或配置文件中的字符串,避免在代码中硬编码。
5. 如果需要多次访问同一字段的值,可以先获取字段对象,避免反复通过反射获取。
6. 如果存在多个过滤条件,可以通过一次循环实现,避免多次循环。
下面是优化后的代码示例:
```
if (StringUtils.isNotBlank(filterConditionList)) {
// 将对象的所有字段名转换为驼峰命名法
Map<String, Field> fieldMap = Arrays.stream(object.getClass().getDeclaredFields())
.collect(Collectors.toMap(f -> underlineToCamel(f.getName()), Function.identity()));
boolean matched = true;
for (SchemaRowFilterCondition schemaRowFilterCondition : schemaRowFilterConditions) {
String field = schemaRowFilterCondition.getField();
String camel = underlineToCamel(field);
Field fieldInfo = fieldMap.get(camel);
// 检查字段是否存在
if (fieldInfo == null) {
throw new CustomException(FIELD_NOT_FOUND_MSG, code);
}
// 检查字段值是否匹配
if (!matchFieldValue(schemaRowFilterCondition.getKey(), fieldInfo, object)) {
matched = false;
break;
}
}
if (matched && schemaRowRuleEo.getRowEditPermission()) {
System.out.println("修改成功");
} else {
throw new CustomException(FIELD_VALUE_NOT_MATCH_MSG, code);
}
}
// 工具方法:获取对象属性值
private static Object getFieldValue(Field field, Object obj) throws IllegalAccessException {
field.setAccessible(true);
return field.get(obj);
}
// 工具方法:设置对象属性值
private static void setFieldValue(Field field, Object obj, Object value) throws IllegalAccessException {
field.setAccessible(true);
field.set(obj, value);
}
// 工具方法:检查字段值是否匹配
private static boolean matchFieldValue(String valueStr, Field field, Object obj) throws IllegalAccessException {
Object value = getFieldValue(field, obj);
return StringUtils.equals(valueStr, value.toString());
}
```
注意:上述优化示例仅供参考,具体优化方案需要根据实际情况进行调整。
阅读全文