Arrays.stream(StarGateEnum.values()).filter(starGateEnum -> chainId.equals(starGateEnum.getChainId()) && tokenAddress.equalsIgnoreCase(starGateEnum.getAddress())).collect(Collectors.toList()).get(0); 怎么完善下
时间: 2023-06-21 12:13:25 浏览: 87
Arrays.asList方法总结
5星 · 资源好评率100%
这段代码可能会引发 `IndexOutOfBoundsException` 异常,因为当列表为空时,我们尝试访问索引0的元素。为了避免这种情况,我们可以先检查列表是否为空,如果为空,则返回null或抛出自定义异常。
例如,你可以使用 `Optional` 类来包装结果,如果列表为空则返回 `Optional.empty()`。示例代码如下:
```
Optional<StarGateEnum> result = Arrays.stream(StarGateEnum.values())
.filter(starGateEnum -> chainId.equals(starGateEnum.getChainId()) && tokenAddress.equalsIgnoreCase(starGateEnum.getAddress()))
.findFirst();
if (result.isPresent()) {
StarGateEnum starGateEnum = result.get();
// 处理 starGateEnum
} else {
// 列表为空的处理逻辑
}
```
如果你不想使用 `Optional`,也可以使用判断列表大小的方式来避免异常。代码示例如下:
```
List<StarGateEnum> list = Arrays.stream(StarGateEnum.values())
.filter(starGateEnum -> chainId.equals(starGateEnum.getChainId()) && tokenAddress.equalsIgnoreCase(starGateEnum.getAddress()))
.collect(Collectors.toList());
if (!list.isEmpty()) {
StarGateEnum starGateEnum = list.get(0);
// 处理 starGateEnum
} else {
// 列表为空的处理逻辑
}
```
阅读全文