List<Integer> orders = sysTokenIterationTops.stream().map(SysTokenIterationTop::getFdTopOrder).filter(Objects::nonNull).collect(Collectors.toList()); 这段代码是获得sysTokenIterationTops这个list对象中toporder属性,我现在需要这个里面最大的元素,且防止判空
时间: 2024-02-27 19:53:40 浏览: 19
好,你可以使用Java 8的Stream API来实现这个功能。可以将过滤和获取最大值的操作链式调用,代码如下:
```
Optional<Integer> maxOrder = sysTokenIterationTops.stream()
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo);
```
首先通过`map()`方法将`SysTokenIterationTop`对象转换为其`fdTopOrder`属性值,然后使用`filter()`方法过滤掉为`null`的元素。接着使用`max()`方法获取最大值,`max()`方法返回一个`Optional`对象,防止`null`值的情况发生。最后你可以通过`Optional`对象的方法获得最大值,代码如下:
```
if (maxOrder.isPresent()) {
Integer max = maxOrder.get();
// do something with max
}
```
其中`isPresent()`方法用于判断是否存在最大值,`get()`方法用于获取最大值。
相关问题
if (sysTokenIterationTops.size() > 0) { List<Integer> orders = sysTokenIterationTops.stream().map(SysTokenIterationTop::getFdTopOrder).filter(Objects::nonNull).collect(Collectors.toList()); }具体的是这个,再优化下
你可以进一步优化这段代码,使其更加简洁和高效。可以使用`Optional`类的`map()`方法来实现获取最大值,代码如下:
```
Integer maxOrder = sysTokenIterationTops.stream()
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo)
.orElse(null);
```
这段代码与之前的代码相比,使用了`Optional`类的`map()`方法来获取最大值,而不是先将结果转换为`List`对象,再获取最大值。这样可以避免创建不必要的`List`对象,提高代码的效率。最后使用`orElse(null)`方法来处理`null`值的情况,如果最大值不存在则返回`null`。
所以,最终的代码如下:
```
Integer maxOrder = sysTokenIterationTops.stream()
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo)
.orElse(null);
if (maxOrder != null) {
// do something with maxOrder
}
```
其中`sysTokenIterationTops`是你需要获取最大值的`List`对象,`SysTokenIterationTop`是`sysTokenIterationTops`中元素的类型,`getFdTopOrder()`是`SysTokenIterationTop`中获取`fdTopOrder`属性的方法。
List<DataPermissionSchemaEo> dataPermissionSchemaEoList = comDataComponent.getDataPermissionSchemaList(); List<SchemaRowRuleEo> schemaRowRuleList = comDataComponent.getSchemaRowRuleList(); List<SchemaColumnRuleEo> schemaColumnRuleList = comDataComponent.getSchemaColumnRuleList(); //设置行权限 根据用户id和用户组织去获取 List<SchemaRowRule> userRowRuleList = schemaRowRuleList.stream() .filter(schemaRowRuleEo -> { List<String> userList = JSONObject.parseArray(schemaRowRuleEo.getRowPermissionUserList(), String.class); List<String> orgList = JSONObject.parseArray(schemaRowRuleEo.getRowPermissionOrgList(), String.class); return userList.contains(userUid) || orgList.contains(orgCode) || userList.contains(WILDCARD) || orgList.contains(WILDCARD); }) .map(schemaRowRuleEo -> { SchemaRowRule schemaRowRule = new SchemaRowRule(); BeanUtils.copyProperties(schemaRowRuleEo, schemaRowRule); return schemaRowRule; }) .collect(Collectors.toList());List<SchemaColumnRule> userColumnRuleList = schemaColumnRuleList.stream() .filter(rule -> { List<String> userList = Optional.ofNullable(rule.getColumnPermissionUserList()) .map(userListStr -> JSONObject.parseArray(userListStr, String.class)) .orElse(Collections.emptyList()); List<String> orgList = Optional.ofNullable(rule.getColumnPermissionOrgList()) .map(orgListStr -> JSONObject.parseArray(orgListStr, String.class)) .orElse(Collections.emptyList()); return userList.contains(userUid) || orgList.contains(orgCode) || userList.contains(WILDCARD) || orgList.contains(WILDCARD); }) .map(rule -> { SchemaColumnRule columnRule = new SchemaColumnRule(); BeanUtils.copyProperties(rule, columnRule); return columnRule; }) .collect(Collectors.toList()); List<DataPermissionSchema> dataPermissionSchemaList = dataPermissionSchemaEoList.stream().map(dataPermissionSchemaEo -> { List<SchemaRowRule> schemaRowRules = userRowRuleList.stream() .filter(schemaRule -> dataPermissionSchemaEo.getDatabaseCode().equals(schemaRule.getDatabaseCode()) && dataPermissionSchemaEo.getSchemaCode().equals(schemaRule.getSchemaCode())) .collect(Collectors.toList()); List<SchemaColumnRule> schemaColumnRules = userColumnRuleList.stream() .filter(schemaRule -> dataPermissionSchemaEo.getDatabaseCode().equals(schemaRule.getDatabaseCode()) && dataPermissionSchemaEo.getSchemaCode().equals(schemaRule.getSchemaCode())) .collect(Collectors.toList()); if(!schemaRowRules.isEmpty() || !schemaColumnRules.isEmpty()) { DataPermissionSchema dataPermissionSchema = new DataPermissionSchema(); dataPermissionSchema.setDatabaseCode(dataPermissionSchemaEo.getDatabaseCode()); dataPermissionSchema.setSchemaCode(dataPermissionSchemaEo.getSchemaCode()); dataPermissionSchema.setSchemaRowRuleList(schemaRowRules); dataPermissionSchema.setSchemaColumnRuleList(schemaColumnRules); return dataPermissionSchema; } return null; }).filter(Objects::nonNull).collect(Collectors.toList());把这段代码改造成每个用户拥有的行权限和列权限
可以将该代码封装成一个方法,接收用户ID和组织代码作为参数,返回该用户拥有的行权限和列权限,代码如下:
```
public List<DataPermissionSchema> getUserDataPermissionSchema(String userUid, String orgCode) {
List<DataPermissionSchemaEo> dataPermissionSchemaEoList = comDataComponent.getDataPermissionSchemaList();
List<SchemaRowRuleEo> schemaRowRuleList = comDataComponent.getSchemaRowRuleList();
List<SchemaColumnRuleEo> schemaColumnRuleList = comDataComponent.getSchemaColumnRuleList();
// 获取用户行权限
List<SchemaRowRule> userRowRuleList = schemaRowRuleList.stream()
.filter(schemaRowRuleEo -> {
List<String> userList = JSONObject.parseArray(schemaRowRuleEo.getRowPermissionUserList(), String.class);
List<String> orgList = JSONObject.parseArray(schemaRowRuleEo.getRowPermissionOrgList(), String.class);
return userList.contains(userUid) || orgList.contains(orgCode) || userList.contains(WILDCARD) || orgList.contains(WILDCARD);
})
.map(schemaRowRuleEo -> {
SchemaRowRule schemaRowRule = new SchemaRowRule();
BeanUtils.copyProperties(schemaRowRuleEo, schemaRowRule);
return schemaRowRule;
})
.collect(Collectors.toList());
// 获取用户列权限
List<SchemaColumnRule> userColumnRuleList = schemaColumnRuleList.stream()
.filter(rule -> {
List<String> userList = Optional.ofNullable(rule.getColumnPermissionUserList())
.map(userListStr -> JSONObject.parseArray(userListStr, String.class))
.orElse(Collections.emptyList());
List<String> orgList = Optional.ofNullable(rule.getColumnPermissionOrgList())
.map(orgListStr -> JSONObject.parseArray(orgListStr, String.class))
.orElse(Collections.emptyList());
return userList.contains(userUid) || orgList.contains(orgCode) || userList.contains(WILDCARD) || orgList.contains(WILDCARD);
})
.map(rule -> {
SchemaColumnRule columnRule = new SchemaColumnRule();
BeanUtils.copyProperties(rule, columnRule);
return columnRule;
})
.collect(Collectors.toList());
// 获取用户权限所在的数据权限模板
List<DataPermissionSchema> dataPermissionSchemaList = dataPermissionSchemaEoList.stream().map(dataPermissionSchemaEo -> {
List<SchemaRowRule> schemaRowRules = userRowRuleList.stream()
.filter(schemaRule -> dataPermissionSchemaEo.getDatabaseCode().equals(schemaRule.getDatabaseCode())
&& dataPermissionSchemaEo.getSchemaCode().equals(schemaRule.getSchemaCode()))
.collect(Collectors.toList());
List<SchemaColumnRule> schemaColumnRules = userColumnRuleList.stream()
.filter(schemaRule -> dataPermissionSchemaEo.getDatabaseCode().equals(schemaRule.getDatabaseCode())
&& dataPermissionSchemaEo.getSchemaCode().equals(schemaRule.getSchemaCode()))
.collect(Collectors.toList());
if(!schemaRowRules.isEmpty() || !schemaColumnRules.isEmpty()) {
DataPermissionSchema dataPermissionSchema = new DataPermissionSchema();
dataPermissionSchema.setDatabaseCode(dataPermissionSchemaEo.getDatabaseCode());
dataPermissionSchema.setSchemaCode(dataPermissionSchemaEo.getSchemaCode());
dataPermissionSchema.setSchemaRowRuleList(schemaRowRules);
dataPermissionSchema.setSchemaColumnRuleList(schemaColumnRules);
return dataPermissionSchema;
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toList());
return dataPermissionSchemaList;
}
```