我有一个静态方法,它使用 java 8 流从集合中识别匹配类型。
而不是使用.filterand .findAny,我想使用类似于 lodash 的_.find的方法,即“迭代集合的元素并返回第一个元素谓词返回真值。”
“查找”类型的方法大概会使代码更加高效和简洁
public static List<Class> types = Arrays.asList(
Contact.class,
Response.class,
Request.class
);
public static Optional<Class> resolveTypeFromFieldNames(Set<String> itemFields) {
return types
.stream()
.filter(itemType -> {
Set<String> fields = Arrays.stream(itemType.getDeclaredFields())
.filter(f -> !f.isSynthetic())
.map(Field::getName)
.collect(Collectors.toSet());
return itemFields.equals(fields);
})
.findAny();
}
Run Code Online (Sandbox Code Playgroud)