小编ebl*_*ahm的帖子

返回 Java 8 流中的第一个匹配项(类似于 _.find)

我有一个静态方法,它使用 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)

java functional-programming java-8 lodash java-stream

1
推荐指数
1
解决办法
3661
查看次数