AdPosition nonNullAdPosition = Optional.ofNullable(adPositionMapper.selectByPrimaryKey(advertDto.getPositionId())) .orElseThrow(() -> new RuntimeException("AdPosition对象为空"));这段代码正常,AdPosition position2 = adPositionMapper.selectByPrimaryKey(advertDto.getPositionId()) .map(Optional::ofNullable) .orElseThrow(() -> new RuntimeException("Ad position not found"));这段代码报错Cannot resolve method 'map' in 'AdPosition',为什么
时间: 2024-01-11 20:02:34 浏览: 39
这是因为 `adPositionMapper.selectByPrimaryKey(advertDto.getPositionId())` 返回的类型不是 `Optional`,所以在对其进行 `map` 操作时会报错。如果你想要使用 `map` 操作,可以将其转换成 `Optional` 类型,例如:
```
Optional<AdPosition> optionalAdPosition = Optional.ofNullable(adPositionMapper.selectByPrimaryKey(advertDto.getPositionId()));
AdPosition position2 = optionalAdPosition.map(Optional::get).orElseThrow(() -> new RuntimeException("Ad position not found"));
```
或者可以直接使用 Java 8 新特性中的 `Optional.ofNullable()` 方法来实现:
```
AdPosition position2 = Optional.ofNullable(adPositionMapper.selectByPrimaryKey(advertDto.getPositionId()))
.orElseThrow(() -> new RuntimeException("Ad position not found"));
```
这样也可以实现相同的功能。
相关问题
AdPosition adPosition = Optional.ofNullable(adPositionMapper.selectByPrimaryKey(advertDto.getPositionId())) .orElseThrow(() -> new RuntimeException("Ad position not found"));改为不存在就使用sql语句插入数据。请示例
如果不存在对应的广告位置,可以使用以下代码插入数据:
```
AdPosition adPosition = adPositionMapper.selectByPrimaryKey(advertDto.getPositionId());
if(adPosition == null) {
AdPosition newPosition = new AdPosition();
newPosition.setId(advertDto.getPositionId());
newPosition.setPositionName("New Position");
adPositionMapper.insert(newPosition);
adPosition = newPosition;
}
```
这样,如果查询不到对应的广告位置,就会创建一个新的广告位置并插入到数据库中。注意,这里我假设你已经定义了 AdPosition 实体类,并且数据库中有对应的 ad_position 表。如果没有,请根据实际情况进行修改。
AdPosition position = adPositionMapper.selectByPrimaryKey(advertDto.getPositionId()) .orElseThrow(() -> new RuntimeException("Ad position not found"));报错Cannot resolve method 'orElseThrow' in 'AdPosition'
这个错误是因为`AdPosition`对象没有实现`Optional`接口,所以不能使用`orElseThrow`方法。你需要使用`ifPresent`方法来判断`AdPosition`对象是否存在,如果存在就执行指定的操作,如果不存在就跳过。例如:
```
Optional<AdPosition> adPosition = adPositionMapper.selectByPrimaryKey(advertDto.getPositionId());
if (adPosition.isPresent()) {
AdPosition position = adPosition.get();
// 这里是存在AdPosition对象的代码逻辑
} else {
throw new RuntimeException("Ad position not found");
}
```
或者你也可以使用`orElseThrow`方法来抛出自定义的异常,但需要将`AdPosition`对象转换为`Optional`类型。例如:
```
AdPosition position = adPositionMapper.selectByPrimaryKey(advertDto.getPositionId())
.map(Optional::ofNullable)
.orElseThrow(() -> new RuntimeException("Ad position not found"));
```
这种方式可以让你在一行代码中完成对`AdPosition`对象的查找并抛出异常的操作。