如何使用 Java 8實作通過多個回圈完成的迭代?
我需要檢查其中一個嵌套物件是否包含指定的Stringie "BA"?
if(errorEntities!=null) {
for(ErrorEntity errorEntity : errorEntities){
for(ErrorItemDetail errorItem : errorEntity.getErrorItem()){
List<EntityRef> relatedEntity = errorItem.getRelatedEntity();
if(relatedEntity!=null || !relatedEntity.isEmpty()){
for(EntityRef entityRef : relatedEntity){
return entityRef.getReferredType().equalsIgnoreCase("BA");
}
}
}
}
}
uj5u.com熱心網友回復:
希望這是您正在尋找的:
if(errorEntities!=null) {
return errorEntities.stream()
.map((ErrorEntity errorEntity) -> errorEntity.getErrorItem())
.flatMap(Collection::stream)
.map((ErrorItemDetail errorItemDetail) -> errorItemDetail.getRelatedEntity())
.filter((List<EntityRef> relatedEntity) -> relatedEntity == null || relatedEntity.isEmpty())
.flatMap(Collection::stream)
.anyMatch((EntityRef entityRef) -> entityRef.getReferredType().equalsIgnoreCase("BA"));
}
uj5u.com熱心網友回復:
我們有 3 級嵌套串列。在這個層次結構的底部,我們有許多 entityRef 串列。我們將從所有這些串列中收集 entityRefs 到一個流中。然后我們將查看其中是否有任何一個具有“BA”的參考型別:
return errorEntities != null && errorEntities.stream()
.flatMap(errorEntity -> errorEntity.getErrorItem().stream())
.map(errorItem -> errorItem.getRelatedEntity())
.filter(relatedEntity -> relatedEntity != null)
.flatMap(relatedEntity -> relatedEntity.stream())
.anyMatch(entityRef -> entityRef.getReferredType().equalsIgnoreCase("BA"))
我們也可以通過方法參考來做到這一點。在這里,我們將創建一個大寫的所有參考型別字串的流。然后我們將看看其中是否有任何一個是“BA”
return errorEntities != null && errorEntities.stream()
.map(ErrorEntity::getErrorItem)
.flatMap(List::stream)
.map(ErrorItemDetail::getRelatedEntity)
.filter(Objects::nonNull)
.flatMap(List::stream)
.map(EntityRef::getReferredType)
.map(String::toUpperCase)
.anyMatch("BA"::equals));
uj5u.com熱心網友回復:
所以你有一個串列ErrorEntity和一個字串標記("BA")。
并且您需要確定您是否至少有一個EntityRef物件深深嵌套在ErrorEntity具有與令牌匹配的屬性的內部。
從您列出的代碼來看,null您的集合的不同級別可能存在值,從干凈編碼的角度來看,這不是一個好情況。但是您可以使用 Java 9 提供的靜態方法來處理它,該方法Stream.ofNullable回傳一個空流或包含一個元素的流(已傳遞給它的引數)。
flatMap()當您需要從單個流元素生成流并作為結果anyMatch()獲取值時使用。boolean
public static boolean matches(List<ErrorEntity> source, String token) {
return Stream.ofNullable(source) // Stream<List<ErrorEntity>>
.flatMap(List::stream) // Stream<ErrorEntity>
.flatMap(errorEntity -> errorEntity.getErrorItem().stream()) // Stream<ErrorItemDetail>
.flatMap(errorItem -> Stream.ofNullable(errorItem.relatedEntity())) // Stream<EntityRef>
.anyMatch(entityRef -> entityRef.getReferredType().equalsIgnoreCase(token));
}
如果說 Java 8 不是指“Java-8 流”,而是您當前使用的版本是 8,那么您可以使用該方法Objects.nonNull()進行空檢查:
public static boolean matches(List<ErrorEntity> source, String token) {
return Stream.of(source) // Stream<List<ErrorEntity>>
.filter(Objects::isNull)
.flatMap(List::stream) // Stream<ErrorEntity>
.flatMap(errorEntity -> errorEntity.getErrorItem().stream()) // Stream<ErrorItemDetail>
.map(ErrorItemDetail::relatedEntity) // Stream<List<EntityRef>>
.filter(Objects::nonNull) // Stream<List<EntityRef>>
.flatMap(List::stream) // Stream<EntityRef>
.anyMatch(entityRef -> entityRef.getReferredType().equalsIgnoreCase(token));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/468165.html
