ebl*_*ahm 1 java functional-programming java-8 lodash java-stream
我有一个静态方法,它使用 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)
不,您已经拥有的完全是这样做的方式,并且实际上并没有降低性能。 filter延迟执行,这意味着只有在找到与谓词匹配的第一个元素之前,才会对谓词进行求值。它并没有计算谓词任何更多的元素比它。
您拥有的是 Stream 框架设计者希望您执行此操作的方式。
| 归档时间: |
|
| 查看次数: |
3661 次 |
| 最近记录: |