java – 对v-> v> 5的解释
发布时间:2020-12-15 04:50:11 所属栏目:Java 来源:网络整理
导读:我有一个给定的函数调用,java给我一个错误,因为对象不能与int相比(当然……).有人可以向我解释一下我要改变什么吗? 我尝试以不同方式支持lambda表达式,但没有任何有用的结果.我认为,lambda表达式是正确的,过滤器函数有点错误,但我无法找出我的错误…… // f
我有一个给定的函数调用,java给我一个错误,因为对象不能与int相比(当然……).有人可以向我解释一下我要改变什么吗?
我尝试以不同方式支持lambda表达式,但没有任何有用的结果.我认为,lambda表达式是正确的,过滤器函数有点错误,但我无法找出我的错误…… // function call filter(v -> v > 5) // function public Optional<T> filter(Predicate<T> tester) { if(isPresent() && tester.test(get())) { return this; } else { return Optional.empty(); } } 我期待一个Optional.empty-Object但是我得到一个java错误,因为v> 5对象v与int无法比较. 解决方法
你必须使T成为一个与int相当的包装类.例如
IntStream.range(0,10) .filter(v -> v > 5) .forEach(System.out::println); 很好,因为v是一个int. 当T未知时,您不能使用此表达式. 您可以做的是假设T必须是数字,例如 filter( v -> ((Number) v).doubleValue() > 5) 但是这会产生一个ClassCastExpection,T是另一种类型. 真正的解决方案是使T a Number 例如 class MyClass<T extends Number> { public Optional<T> filter(Predicate<T> test) { 或使其成为像int这样的特定类型 class MyClass { public IntOptional filter(IntPredicate test) { (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |