加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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) {

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读