如果我有三个类(Foo,Bar和FooBar),我如何在Java 8中检查Stream中的实例?
是否有类似的内容:
Foo foo = new Foo();
if (Stream.of<Class>(Foo.class, Bar.class, FooBar.class).anyMatch(c -> foo instanceof c)) {
System.out.println("yes");
}
我想避免这样的事情:
if (foo instnaceof Foo || foo instanceof Bar || foo instanceof FooBar) {...}
答案 0 :(得分:0)
我不太确定这是否是您要找的:
我们可以使用方法参考foo instnaceof Foo
和Foo.class::isInstance
Predicate
Stream.of(/* your objects here */)
.anyMatch(
((Predicate)(Foo.class::isInstance))
.or(FooBar.class::isInstance)
.or(Bar.class::isInstance)
);
}
我们需要将方法引用Foo.class::isInstance
转换为Predicate
,之后我们可以使用Predicates
方法将其与其他Predicate#or
结合使用。
我希望这会有所帮助。