Java – interpretation of V – > V > 5
I have a given function call, and Java gives me an error because the object cannot be compared with int (of course...) Can someone explain to me what I want to change?
I tried to support lambda expressions in different ways, but there were no useful results I think the lambda expression is correct and the filter function is a little wrong, but I can't find my error
// 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(); } }
I look forward to an optional Empty object, but I get a Java error because V > 5 object v cannot be compared with int
Solution
You must make t a wrapper class equivalent to int for example
IntStream.range(0,10) .filter(v -> v > 5) .forEach(System.out::println);
Good, because V is an int
You cannot use this expression when t is unknown
What you can do is assume that t must be a number, for example
filter( v -> ((Number) v).doubleValue() > 5)
But this will produce a classcast expectation, and t is another type
The real solution is to make t a number
for example
class MyClass<T extends Number> { public Optional<T> filter(Predicate<T> test) {
Or make it a specific type like int
class MyClass { public IntOptional filter(IntPredicate test) {