【发布时间】:2021-05-10 08:32:59
【问题描述】:
考虑以下键(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
}
});
我可以用下划线替换所有小写,但我正在寻找更有效的方法。
【问题讨论】:
-
这能解决您的问题吗? stackoverflow.com/questions/10310321/…
-
谢谢,但不完全是,我可以用下划线替换所有小写,但我正在寻找更有效的方法。也许是一些忽略大小写格式或类似的方法。
-
Sets、Maps,默认调用
equals()方法。这里没有“简单”。您要么实现使用不同类型比较的非常特殊的 Set,要么硬着头皮保留多个包含这些“转换”ID 的集合。请注意,忽略大小写并没有真正的帮助,因为它会留下“_”来使比较失败。 -
你能澄清一下你认为“用下划线替换小写字母”效率低下的地方吗?在我看来,您有两种选择:(1)最初将您的字段转换为下划线而不是 CamelCase 表示法,(2)保持字段不变,而是在每次查找期间将键从下划线转换为 CamelCase。如果您的字段相对较少且查找次数较多,则方法 (1) 是迄今为止更有效的方法。
标签: java collections java-stream camelcasing