在 java 中我的数组中的流图中使用条件
use conditions inside stream map in my array in java
我正在做一个 java 项目,我必须使用 java 流来收集对象列表中所有对象的 ID。
现在我只想收集那些类型匹配特定值的对象的id。
我在用什么:
List<String> skuGroupIds = skuGroupPagedResponseMap.getData().stream().map(this::getGroupId).collect(Collectors.toList());
现在我想使用条件,我这样做了,但这给出了语法错误:
List<String> skuGroupIds = skuGroupPagedResponseMap.getData().stream().map(group->group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT)?this::getGroupId:return null;).collect(Collectors.toList());
getGroupID function used inside map
private String getGroupId(SkuGroupResponseDTO skuGroupResponseDTO){
return skuGroupResponseDTO.getSkuId() + Constants.HYPHEN + skuGroupResponseDTO.getId();
}
谁能帮我解决这个问题?任何建议将不胜感激。
您在 map()
中的 lambda 应该如下所示:
.map(group -> group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT) ? this::getGroupId : null)
或者像这样:
.map(group -> {
return group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT) ? this::getGroupId : null;
})
但是使用filter()
会好很多,如评论所述:
List<String> skuGroupIds = skuGroupPagedResponseMap.getData()
.stream()
.filter(group -> group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT))
.map(this::getGroupId)
.collect(Collectors.toList());
我正在做一个 java 项目,我必须使用 java 流来收集对象列表中所有对象的 ID。
现在我只想收集那些类型匹配特定值的对象的id。
我在用什么:
List<String> skuGroupIds = skuGroupPagedResponseMap.getData().stream().map(this::getGroupId).collect(Collectors.toList());
现在我想使用条件,我这样做了,但这给出了语法错误:
List<String> skuGroupIds = skuGroupPagedResponseMap.getData().stream().map(group->group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT)?this::getGroupId:return null;).collect(Collectors.toList());
getGroupID function used inside map
private String getGroupId(SkuGroupResponseDTO skuGroupResponseDTO){
return skuGroupResponseDTO.getSkuId() + Constants.HYPHEN + skuGroupResponseDTO.getId();
}
谁能帮我解决这个问题?任何建议将不胜感激。
您在 map()
中的 lambda 应该如下所示:
.map(group -> group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT) ? this::getGroupId : null)
或者像这样:
.map(group -> {
return group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT) ? this::getGroupId : null;
})
但是使用filter()
会好很多,如评论所述:
List<String> skuGroupIds = skuGroupPagedResponseMap.getData()
.stream()
.filter(group -> group.getCreatedType().equals(SkuGroupCreationType.SKU_GROUP_LOT))
.map(this::getGroupId)
.collect(Collectors.toList());