簡體   English   中英

Java流類型問題

[英]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:如果您的結果不止一個地適用於所有mapmap更相關。 在您的問題中更適合投射

問題中顯示的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM