使用Java流和泛型,我正在尝试创建一个Collector,如果流为空,则返回Optional.empty;如果流只有一个项目,则返回Optional;如果流有多个项目,则抛出异常。
然而,我遇到了一个我不理解的错误。
期望的用法应该是
请问有人可以解释一下出了什么问题吗?
public static <T, R extends Optional<T>> Collector<T, ?, R> toOptional() {
return Collectors.collectingAndThen(
Collectors.toList(),
list -> {
if (list.size() > 1) {
throw new CollectingException("More than one item found in: " + list);
}
if (list.size() == 1) {
return Optional.of(list.get(0));
}
return Optional.empty();
}
);
}
然而,我遇到了一个我不理解的错误。
Required type:
Collector<T,?,R>
Provided:
Collector<Object,Object,Object>
no instance(s) of type variable(s) T exist so that Optional<T> conforms to R inference variable RR has incompatible bounds: equality constraints: R lower bounds: Optional<T1868063>
期望的用法应该是
List<Person> people = new ArrayList<>();
Optional<Person> john = people.stream().filter(person->"John".equals(person.getName())).collect(toOptional());
请问有人可以解释一下出了什么问题吗?