[英]Java stream type issue
我無法以某種方式在流中對instanceof
使用檢查。 測試中出現問題:
ArgumentCaptor<MyClass> arg = ArgumentCaptor.forClass(MyClass.class);
verify(modelService).save(arg.capture());
方法save
使用不同的參數(不同類的實例)調用了3次,並且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;
}
}
嘗試這種鑄造 。 因為filter
僅根據您的檢查規則過濾流。 這是解決問題的一種方法。 或使用map
進行投射。
MyClass argument = ((MyClass)arg.getAllValues()
.stream().
.filter(v -> v instanceof MyClass)
.findFirst()
.get());
PS:如果您的結果不止一個地適用於所有map
則map
更相關。 在您的問題中更適合投射
問題中顯示的for each循環示例在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.