java Optional<Object>转成List<Integer>
时间: 2023-07-09 20:05:14 浏览: 204
如果 Optional 中的 Object 是一个 List<Integer>,那么可以使用 Optional 类的 map() 方法将其转换成 List<Integer>。示例如下:
```
Optional<List<Integer>> optionalList = Optional.of(Arrays.asList(1, 2, 3));
List<Integer> intList = optionalList.map(list -> new ArrayList<>(list)).orElse(Collections.emptyList());
```
上述代码中,首先创建一个 Optional 对象 optionalList,其中包含一个 List<Integer> 对象。然后使用 map() 方法将 Optional 对象中的 List<Integer> 转换成 ArrayList<Integer>。最后使用 orElse() 方法获取转换后的 List<Integer> 对象,如果 Optional 对象中的值为空,则返回一个空的 List<Integer> 对象。
相关问题
private List<Integer> getSingleList(Class<?> clz, String method) { Optional<Object> optional = ClzUtils.callSingletonMethod(clz, method, SP_REGISTRY.get(clz)); return optional.flatMap(obj -> obj instanceof List ? Optional.of((List<Integer>) obj) : Optional.empty()) .orElse(new ArrayList<>()); } 怎么样不会告警
这段代码中的告警可能是因为类型转换不安全,建议进行以下修改:
1. 对于 `ClzUtils.callSingletonMethod` 方法的调用,可以使用泛型来限定返回值的类型,并使用 `Optional` 类型来避免空指针异常,例如:
```
Optional<List<Integer>> optional = ClzUtils.<List<Integer>>callSingletonMethod(clz, method, SP_REGISTRY.get(clz));
```
2. 在对 `optional` 进行操作之前,可以先进行空判断,例如:
```
if (optional.isPresent()) {
List<Integer> list = optional.get();
// ...
}
```
3. 如果你确定 `SP_REGISTRY.get(clz)` 返回的对象一定是指定类的单例对象,可以使用 `@SuppressWarnings("unchecked")` 注解来消除告警,例如:
```
@SuppressWarnings("unchecked")
List<Integer> list = (List<Integer>) ClzUtils.callSingletonMethod(clz, method, SP_REGISTRY.get(clz)).orElse(new ArrayList<>());
```
需要注意的是,使用 `@SuppressWarnings` 注解时,要确保代码的类型安全,否则可能会发生运行时异常。
使用java8新特性Optinal优化这些代码public BaseusResponse<BatchOperateResultVO> updRetailOrAdjDate(OrderUpdDateBatchCmd updDateBatchCmd) { List<Object> successList = new ArrayList<>(); List<Object> failList = new ArrayList<>(); List<BatchOperateResultVO.BatchOperateResultDetailVO> batchOperateResultDetailVoList = new ArrayList<>(); updDateBatchCmd.getList().forEach(updCmd -> { if (!OrderRetailConstants.CAN_UPD_DATE_ORDER_TYPE_LIST.contains(updCmd.getOrderType())) { throw new OrderBusinessException("订单类型不允许修改"); } }); // 按类型分组 Map<Integer, List<OrderUpdDateCmd>> typeAndCmdListMap = updDateBatchCmd.getList().stream().collect(Collectors.groupingBy(OrderUpdDateCmd::getOrderType)); List<OrderUpdDateCmd> retailCmdList = typeAndCmdListMap.get(OrderCenterTypeEnum.RETAIL_ORDER_TYPE.getOrderType()); List<OrderUpdDateCmd> retailAfterCmdList = typeAndCmdListMap.get(OrderCenterTypeEnum.RETAIL_AFTER_ORDER_TYPE.getOrderType()); List<OrderUpdDateCmd> adjList = typeAndCmdListMap.get(OrderCenterTypeEnum.ADJUSTMENT_ORDER_TYPE.getOrderType()); if (!CollectionUtils.isEmpty(retailCmdList)) { orderRetailUpdateCmdExe.updDate(updDateBatchCmd.getUpdDate(), successList, failList, batchOperateResultDetailVoList, retailCmdList); } if (!CollectionUtils.isEmpty(retailAfterCmdList)) { orderRetailAfterSalesUpdateCmdExe.updDate(updDateBatchCmd.getUpdDate(), successList, failList, batchOperateResultDetailVoList, retailAfterCmdList); } if (!CollectionUtils.isEmpty(adjList)) { orderBusinessAdjustmentUpdateCmdExe.updDate(updDateBatchCmd.getUpdDate(), successList, failList, batchOperateResultDetailVoList, adjList); } return BaseusResponse.success(BatchOperateResultVO.builder().totalCount(successList.size() + failList.size()).successCount(successList.size()).failCount(batchOperateResultDetailVoList.size()).batchOperateResultDetailVO(batchOperateResultDetailVoList).build()); }
下面是使用Java 8的Optional优化后的代码:
```java
public BaseusResponse<BatchOperateResultVO> updRetailOrAdjDate(OrderUpdDateBatchCmd updDateBatchCmd) {
List<Object> successList = new ArrayList<>();
List<Object> failList = new ArrayList<>();
List<BatchOperateResultVO.BatchOperateResultDetailVO> batchOperateResultDetailVoList = new ArrayList<>();
updDateBatchCmd.getList().forEach(updCmd -> {
if (!OrderRetailConstants.CAN_UPD_DATE_ORDER_TYPE_LIST.contains(updCmd.getOrderType())) {
throw new OrderBusinessException("订单类型不允许修改");
}
});
// 按类型分组
Map<Integer, List<OrderUpdDateCmd>> typeAndCmdListMap = updDateBatchCmd.getList().stream()
.collect(Collectors.groupingBy(OrderUpdDateCmd::getOrderType));
Optional.ofNullable(typeAndCmdListMap.get(OrderCenterTypeEnum.RETAIL_ORDER_TYPE.getOrderType()))
.ifPresent(retailCmdList -> orderRetailUpdateCmdExe.updDate(updDateBatchCmd.getUpdDate(), successList, failList,
batchOperateResultDetailVoList, retailCmdList));
Optional.ofNullable(typeAndCmdListMap.get(OrderCenterTypeEnum.RETAIL_AFTER_ORDER_TYPE.getOrderType()))
.ifPresent(retailAfterCmdList -> orderRetailAfterSalesUpdateCmdExe.updDate(updDateBatchCmd.getUpdDate(), successList,
failList, batchOperateResultDetailVoList, retailAfterCmdList));
Optional.ofNullable(typeAndCmdListMap.get(OrderCenterTypeEnum.ADJUSTMENT_ORDER_TYPE.getOrderType()))
.ifPresent(adjList -> orderBusinessAdjustmentUpdateCmdExe.updDate(updDateBatchCmd.getUpdDate(), successList, failList,
batchOperateResultDetailVoList, adjList));
return BaseusResponse.success(BatchOperateResultVO.builder()
.totalCount(successList.size() + failList.size())
.successCount(successList.size())
.failCount(batchOperateResultDetailVoList.size())
.batchOperateResultDetailVO(batchOperateResultDetailVoList)
.build());
}
```
上述代码中,我们使用了`Optional.ofNullable()`方法来处理可能为空的`List`,并通过`ifPresent()`方法传入一个Lambda表达式,在Lambda表达式中执行对应的操作。这样可以避免`null`值的判断和多层嵌套的代码。同时,这种写法也使得代码更加简洁易读。
阅读全文
相关推荐















