jdk8 使用的com.alibaba.fastjson,优化以下代码 public List<String> getTableColumnEnum(Integer datasourceId, String tableName, String columnName) { String sql = String.format(SQL_TEMPLATE, columnName, tableName, LIMIT); SqlExecuteRequest sqlExecuteRequest = new SqlExecuteRequest(); sqlExecuteRequest.setDataSourceId(datasourceId); sqlExecuteRequest.setSql(Func.encodeBase64(sql)); R<JSONObject> sqlExecuteResult = dolphinSqlClient.sqlExecute(sqlExecuteRequest); if (sqlExecuteResult == null) { throw new ServiceException("查询枚举值失败!"); } if (!sqlExecuteResult.isSuccess()) { throw new ServiceException("查询枚举值失败!"); } List<String> columnValues = new ArrayList<>(); JSONArray results = sqlExecuteResult.getData().getJSONArray("result"); for (int i = 0; i < results.size(); i++) { JSONObject result = results.getJSONObject(i); columnValues.add(result.getString("columnName")); } return columnValues.stream().distinct().collect(Collectors.toList()); }
时间: 2024-02-02 13:02:26 浏览: 124
走进JDK之不可变类String
可以考虑使用 Fastjson 的反序列化功能,将返回的 JSON 数据直接转换为 Java 对象,避免手动解析 JSON 数据的过程。代码如下:
```
public List<String> getTableColumnEnum(Integer datasourceId, String tableName, String columnName) {
String sql = String.format(SQL_TEMPLATE, columnName, tableName, LIMIT);
SqlExecuteRequest sqlExecuteRequest = new SqlExecuteRequest();
sqlExecuteRequest.setDataSourceId(datasourceId);
sqlExecuteRequest.setSql(Func.encodeBase64(sql));
R<JSONObject> sqlExecuteResult = dolphinSqlClient.sqlExecute(sqlExecuteRequest);
if (sqlExecuteResult == null || !sqlExecuteResult.isSuccess()) {
throw new ServiceException("查询枚举值失败!");
}
JSONArray results = sqlExecuteResult.getData().getJSONArray("result");
List<String> columnValues = JSON.parseArray(results.toJSONString(), ColumnValue.class)
.stream().map(ColumnValue::getColumnName).distinct().collect(Collectors.toList());
return columnValues;
}
private static class ColumnValue {
private String columnName;
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
}
```
其中,`ColumnValue` 类是一个简单的 POJO 类,用于存储从 JSON 中解析出来的数据。`JSON.parseArray()` 方法将 JSON 数组转换为 `List<ColumnValue>` 对象,然后使用流操作进行去重和转换,得到最终的枚举值列表。
阅读全文