优化代码 Map<String, Map<String, List<Object[]>>> binMap = Maps.newHashMap(); // 行索引信息:0-table_name 1-col_name 2-bin_start 3-bin_end for (Object[] row : query) { String table = row[0].toString(); String column = row[1].toString(); Object binStart = row[2]; Object binEnd = row[3]; binMap.putIfAbsent(table, Maps.newHashMap()); binMap.get(table).putIfAbsent(column, Lists.newArrayList()); binMap.get(table).get(column).add(new Object[]{binStart, binEnd}); } ctx.setBinMap(binMap);
时间: 2024-01-18 09:01:48 浏览: 110
优化算法的代码
这段代码的作用是将一个查询结果中的数据按照表名、列名、区间范围存储到一个Map中。该Map的键为表名,值为另一个Map,另一个Map的键为列名,值为一个Object数组列表,数组中存储该列的区间范围。
为了优化代码,可以考虑以下几点:
1. 使用Java 8的Stream API简化代码:
```
Map<String, Map<String, List<Object[]>>> binMap = query.stream()
.collect(Collectors.groupingBy(row -> row[0].toString(),
Collectors.groupingBy(row -> row[1].toString(),
Collectors.mapping(row -> new Object[]{row[2], row[3]}, Collectors.toList()))));
ctx.setBinMap(binMap);
```
2. 使用Guava的MultiMap代替嵌套的Map和List:
```
ListMultimap<String, Pair<Object, Object>> binMap = ArrayListMultimap.create();
for (Object[] row : query) {
String table = row[0].toString();
String column = row[1].toString();
Object binStart = row[2];
Object binEnd = row[3];
binMap.put(table + "." + column, Pair.of(binStart, binEnd));
}
ctx.setBinMap(binMap.asMap());
```
这样做的好处是代码更简洁,且不需要手动创建Map和List,同时也能够保证数据的正确性。
阅读全文