public class UserInfo{ String id;String Age;String name;} 现在有两个一一对应的list,List<String> ageListList,<String> nameList, ageList和nameList长度相同都为2,每个元素一一对应,List<UserInfo> users有3条数据,我只想筛选出,符合nameList和ageList对应的那两条数据 Java实现
时间: 2024-03-08 19:50:24 浏览: 79
可以使用 Java 8 的 Stream API 来实现:
```
List<String> ageList = Arrays.asList("20", "25");
List<String> nameList = Arrays.asList("Alice", "Bob");
List<UserInfo> filteredUsers = users.stream()
.filter(user -> ageList.contains(user.getAge()) && nameList.contains(user.getName()))
.collect(Collectors.toList());
```
使用 `filter` 方法筛选出符合条件的用户,其中使用了 `contains` 方法来判断 `ageList` 和 `nameList` 是否包含用户的年龄和姓名。最后使用 `collect` 方法将结果收集为一个列表。
相关问题
public UserInfo findUserInfoByIdAndName(int age, String name) throws Exception { if (StringUtils.isBlank(name)) { throw new Exception("名称不能为空"); } if (age < 0 || age > 120) { throw new Exception("年龄超出范围"); } UserInfoExample example = new UserInfoExample(); UserInfoExample.Criteria criteria = example.createCriteria(); criteria.andNameEqualTo(name); criteria.andAgeBetween(age - 10, age + 10); List<UserInfo> list = userInfoMapper.selectByExample(example); if (list == null || list.size() == 0) { throw new Exception("未找到符合条件的用户"); } return list.get(0); }优化代码
以下是对业务层代码的优化:
```java
@Service
public class DeviceService {
@Autowired
private UserInfoMapper userInfoMapper;
public UserInfo findUserInfoByIdAndName(int age, String name) throws Exception {
if (StringUtils.isBlank(name)) {
throw new IllegalArgumentException("名称不能为空");
}
if (age < 0 || age > 120) {
throw new IllegalArgumentException("年龄超出范围");
}
UserInfoExample example = new UserInfoExample();
UserInfoExample.Criteria criteria = example.createCriteria();
criteria.andNameEqualTo(name);
criteria.andAgeBetween(age - 10, age + 10);
List<UserInfo> list = userInfoMapper.selectByExample(example);
if (CollectionUtils.isEmpty(list)) {
throw new NotFoundException("未找到符合条件的用户");
}
return list.get(0);
}
}
```
这里使用了IllegalArgumentException和NotFoundException来替代Exception,使得代码更加规范。同时使用了CollectionUtils.isEmpty方法来判断list是否为空,代码更加简洁。
@ApiOperation(value = "根据名称和年龄段查找用户") // 修改API文档描述 @ApiImplicitParams(value = { @ApiImplicitParam(name = "名称", value = "年龄段", dataTypeClass = String.class) }) @GetMapping ("/find") public UserInfo findDeviceInfo(@RequestParam String name,@RequestParam int age) throws Exception { return deviceService.findUserInfoByIdAndName(age, name); }通过控制层代码编写出业务层代码
以下是通过控制层代码编写出的业务层代码:
```java
@Service
public class DeviceService {
@Autowired
private UserInfoMapper userInfoMapper;
public UserInfo findUserInfoByIdAndName(int age, String name) throws Exception {
if (StringUtils.isBlank(name)) {
throw new Exception("名称不能为空");
}
if (age < 0 || age > 120) {
throw new Exception("年龄超出范围");
}
UserInfoExample example = new UserInfoExample();
UserInfoExample.Criteria criteria = example.createCriteria();
criteria.andNameEqualTo(name);
criteria.andAgeBetween(age - 10, age + 10);
List<UserInfo> list = userInfoMapper.selectByExample(example);
if (list == null || list.size() == 0) {
throw new Exception("未找到符合条件的用户");
}
return list.get(0);
}
}
```
这段代码是业务层的代码,它通过调用userInfoMapper中的selectByExample方法来查找符合条件的用户信息。在方法中添加了参数校验,如果名称为空、年龄超出范围或未找到符合条件的用户则抛出异常。
阅读全文