Casting – Java 8 – filtering collections with external parameters
•
Java
I have an animal map containing specific successors
MyBaSEObjectAnimalMap.values().stream().
filter(x -> x instanceof Dog).
map(x -> (Dog) x).
toArray(Dog[]::new);
Is there any way to abstract this?
I want to implement a private method with the following signature:
filterMapByType(Map<String,Animal> map,Class<T extends Animal> type)
Or something like that
Solution
You can provide an intfunction to call toArray, so you can get an array of type t instead of an array of objects
public static <T extends Animal> T[] filterMapByType(Map<String,Class<T> type,IntFunction<T[]> generator) {
return map.values()
.stream()
.filter(type::isinstance)
.map(type::cast)
.toArray(generator);
}
Give an example of a telephone call:
Dog[] dogs = filterMapByType(map,Dog.class,Dog[]::new);
Dog []: new is equivalent to length – > new dog [length], that is, a function that takes an int as a parameter and returns an array of type dog with the size of length
If you can return to a list, you can use collect(toList()); instead of. ToArray (generator);
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
