如何检查元素是Java中的一个类的实例?

时间:2018-02-01 13:19:18

标签: java java-stream

如果我有三个类(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) {...}

1 个答案:

答案 0 :(得分:0)

我不太确定这是否是您要找的: 我们可以使用方法参考foo instnaceof FooFoo.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结合使用。

我希望这会有所帮助。