如何解决Java - 检查 under_score 字符串是否在 lowerCamel 字符串列表中
考虑以下键(under_score)和字段(lowerCamel):
keys = ["opened_by","ticket_owner","close_reason"]
fields = ["openedBy","ticketowner","closeReason"]
我正在寻找一种有效的 Java 方法来检查 key
是否在 fields
中,我希望以下内容返回 true
:
fields = ["openedBy","ticketowner"]
return fields.contains("opened_by")) //true
我的代码:
Set<String> incidentFields = Arrays
.stream(TicketIncidentDTO.class.getDeclaredFields())
.map(Field::getName)
.collect(Collectors.toSet()
);
responseJson.keySet().forEach(key ->{
if (incidentFields.contains(key))
{
//Do something
}
});
我可以用下划线替换所有小写字母,但我正在寻找更有效的方法。
解决方法
尝试使用 CaseUtils 中的 Commons Text
// opened_by -> openedBy
private String toCamel(String str) {
return CaseUtils.toCamelCase(str,false,new char[] { '_' });
}
List<String> keys = Arrays.asList("opened_by","ticket_owner","close_reason","full_name");
List<String> fields = Arrays.asList("openedBy","ticketOwner","closeReason");
keys.forEach(t -> {
// check
if (fields.contains(toCamel(t))) {
System.out.println(t);
}
});
,
如果您没有 abcXyz
(abc_xyz
) 和 abCxyz
(ab_cxyz
) 等字段(具有相同拼写但不同单词组合的字段),那么一种解决方案将用空的 "_"
替换 ""
,然后使用 equalsIgnoreCase
与 fieldName 进行比较。另一个但类似的解决方案是将每个 fieldName 转换为小写,然后在将“_”替换为“”后将其与驼峰式字符串进行比较。与第一种方法相比,这可能会消除额外循环的使用。
Set<String> fields= Arrays.stream(TicketIncidentDTO.class.getDeclaredFields())
.map(Field::getName)
.map(String::toLowerCase)
.collect(Collectors.toSet());
responseJson.keySet()
.filter(key -> fields.contains(key.replaceAll("_","")))
.forEach(key -> {
// do something..
});
,
一个简单的 toCamel
方法:
private String toCamel(String str) {
String[] parts = str.split("_");
StringBuilder sb = new StringBuilder(parts[0]);
for (int i=1; i < parts.length ; i++) {
String part = parts[i];
if (part.length() > 0) {
sb.append(part.substring(0,1).toUpperCase()).append(part.substring(1));
}
}
return sb.toString();
}
现在使用完全相同的方法:
keys.forEach(t -> {
if (fields.contains(toCamel(t))) {
System.out.println("Fields contain " + t);
} else {
System.out.println("Fields doesn't contain " + t);
}
});
我可以用下划线替换所有小写字母,但我正在寻找更有效的方法。
使用 Set
作为 keys
和 fields
的数据结构,这在查找中非常有效。此外,它适用于这个用例,因为在 JSON 中有重复的键是没有意义的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。