作者:卖火柴的杜拉拉 | 来源:互联网 | 2022-12-04 13:55
我的要求:我的接口只包含诸如的条目public final static short SOME_COnST= whatever
.问题:短常数需要是唯一的.并且当存在重复时,我主要感兴趣的是导致冲突的SOME_CONST_A,SOME_CONST_B,...名称.
我写下面的测试来测试通过反射.它有效,但我发现它很笨重而且不是很优雅:
@Test
public void testIdsAreUnique() {
Map> fieldNamesById = new LinkedHashMap<>();
Arrays.stream(InterfaceWithIds.class.getDeclaredFields())
.filter(f -> f.getClass().equals(Short.class))
.forEach((f) -> {
Short key = null;
String name = null;
try {
key = f.getShort(null);
name = f.getName();
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
fieldNamesById.computeIfAbsent(key, x -> new ArrayList<>()).add(name);
});
assertThat(fieldNamesById.entrySet().stream().filter(e -> e.getValue().size() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)), is(Collections.emptyMap()));
}
有没有办法避免中间本地地图实例?
(奖励问题:有没有更好的方法来缩短用键/值对填充地图的lambda?)