java - Java流类型问题
问题描述
不知何故,我无法instanceof
在流中使用检查。测试中出现问题:
ArgumentCaptor<MyClass> arg = ArgumentCaptor.forClass(MyClass.class);
verify(modelService).save(arg.capture());
方法save
用不同的参数(不同类的实例)调用了 3 次,并arg.getAllValues()
返回SomeOtherClassObject1,SomeOtherClassObject2,MyClassObject
Stream bellow 抛出异常“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;
}
}
解决方案
The for each loop example shown in the question contains an explicit cast after the instanceof check. The following would be equivalent to that loop:
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
推荐阅读
- javascript - 如何从 JavaScript 对象中获取属性同时删除它
- python - 我的函数不断从整数列表中跳过负值
- python - 如何以与 tkinter 上的 IntVar() 或 StringVar() 相同的方式在 PyQt5 上使用 Vars?
- sql - Postgres如何迭代嵌套的JSON对象
- javascript - 输入要过滤的字符时出现Angular ng-select“未找到项目”错误
- javascript - 分隔符之间的正则表达式捕获,除非分隔符在其他分隔符之间
- r - 选择与另一个多边形相交(或完全在其中)的多边形 [R sf]
- pandoc - Pandoc `writeMarkdown` 不包括元数据,即写(读)不是 - 需要什么扩展?
- vue.js - 组件已定义但从未使用 no-unused-vars
- ruby-on-rails - 如何将 Ruby 脚本与对象关联并按需执行(在 Rails 中)?