gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:00:24 34 4
gpt4 key购买 nike

我有一个静态方法,它使用 Java 8 流从集合中识别匹配类型。

我不想使用 .filter.findAny,而是使用类似于 lodash 的 _.find 的方法,即“遍历集合的元素并返回第一个元素谓词返回 truthy for。”

“查找”类型的方法可能会使代码更加高效和简洁

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();
}

最佳答案

不,您已经拥有的是完全做到这一点的方式,而且它实际上并没有降低性能。 filter 是惰性执行的,这意味着只有在找到与谓词匹配的第一个元素时才会对谓词求值。它不会对谓词求值的元素超出它必须求值的范围。

您所拥有的是 Stream 框架设计者希望您执行此操作的方式。

关于java - 返回 Java 8 流中的第一个匹配项(类似于 _.find),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374582/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com