Java流类型问题

标签 java java-stream

不知何故,我无法在流中使用 instanceof 检查。测试时出现的问题:

ArgumentCaptor<MyClass> arg = ArgumentCaptor.forClass(MyClass.class);
verify(modelService).save(arg.capture());

使用不同参数(不同类的实例)调用方法 save 三次,并且 arg.getAllValues() 返回 SomeOtherClassObject1,SomeOtherClassObject2,MyClassObject

流波纹管抛出异常“SomeOtherClass 无法转换为 MyClass”

MyClass argument = arg.getAllValues().stream()
.filter(v -> v instanceof MyClass)
.findFirst()
.get()

但是如果我使用 foreach 一切正常:

MyClass argument = null;
for(Object o : arg.getAllValues()) {
    if(o instanceof MyClass) {
        argument = (MyClass) o;
        break;
    }
}

最佳答案

问题中显示的 for every 循环示例在instanceof 检查后包含显式强制转换。以下内容与该循环等效:

MyClass argument =
    arg.getAllValues()
        .stream()                            // Stream<SomeOtherClass>
        .filter(v -> v instanceof MyClass)   // Stream<SomeOtherClass>
        .map(MyClass.class::cast)            // Stream<MyClass>
        .findFirst()                         // Optional<MyClass>
        .orElse(null);                       // MyClass

关于Java流类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131776/

相关文章:

java - 删除部分 XML 声明,编码 ="UTF-8"独立 ="yes"JAXB

java - Fragment 和 BroadcastReceiver 在几秒钟后卡住应用程序

Java8 列表。调用空函数

java - 算术运算符不能应用于 IntStream

java - 为什么 Stream 没有 toList() 方法?

java - Java 的最佳 XML 解析器

java - Akka HelloAkkaJava.java 示例不工作

java - 当我尝试在 java 中调用该类时,为什么我会得到一个空白表单

java - 使用 .map() 编写 for 循环

java - 在某些情况下使用 Java Stream 计算唯一字符并验证 String