首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >v-> v>5说明

v-> v>5说明
EN

Stack Overflow用户
提问于 2019-01-09 20:22:17
回答 4查看 117关注 0票数 3

我有一个给定的函数调用,java给了我一个错误,因为对象不能与int相比较(当然……)。有人能给我解释一下我需要改变什么吗?

我尝试用不同的方法对lambda表达式加括号,但没有得到任何有用的结果。我认为lambda表达式是正确的,filter-function是稍微错误的,但是我找不到我的错误……

代码语言:javascript
复制
// 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相比较。

EN

回答 4

Stack Overflow用户

发布于 2019-01-09 20:25:20

您必须使T成为一个可与int相媲美的包装类。例如:

代码语言:javascript
复制
IntStream.range(0, 10)
         .filter(v -> v > 5)
         .forEach(System.out::println);

是可以的,因为v是一个int

T未知时,不能使用此表达式。

你可以做的是假设T必须是一个数字。

代码语言:javascript
复制
filter( v -> ((Number) v).doubleValue() > 5)

但是,如果T是另一种类型,则会生成ClassCastExpection。

真正的解决方案是让T成为Number

例如:

代码语言:javascript
复制
class MyClass<T extends Number> {
    public Optional<T> filter(Predicate<T> test) {

或将其设置为特定类型,如int

代码语言:javascript
复制
class MyClass {
    public IntOptional filter(IntPredicate test) {
票数 4
EN

Stack Overflow用户

发布于 2019-01-09 20:24:48

在Java原语中,类型(例如int)和对象(例如Object)在类型层次结构中没有共同的祖先。正因为如此,谓词和其他流结构有两种风格,例如,在使用int时必须使用IntPredicate,在使用Object时必须使用Predicate

编写过滤器函数的方法是使用OptionalIntIntPredicate

代码语言:javascript
复制
public OptionalInt filter(IntPredicate tester) {
    if (isPresent() && tester.test(get())) {
        return ...
    } else {
        return OptionalInt.empty();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2019-01-09 20:39:57

v -> v > 5可以有不同的含义。这取决于上下文。

  1. 它可能是导致编译错误的(Object v) -> v > 5,因为>不能应用于Object

Stream.of("123",123).filter(v -> v>5);

  • 它可能是一个(Integer v) -> v > 5,表示为了进行比较并返回结果,将执行取消装箱和自动装箱:

Stream.of(123,123).filter(v -> v>5);

  • 它可能是一个(int v) -> v > 5,这意味着它是IntPredicate的一个实例,在这里事情会很顺利:

IntStream.of(123,123).filter(v -> v> 5);

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54110063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档