实现关键字查询

实际业务中,我们经常会用到关键字查询,以下是使用智能合约+for循环遍历实现的一个关键字查询业务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 主要方法
public static List<Map<String, Object>> filterByKeyword(List<Map<String, Object>> dataList, String keyword) {
List<Map<String, Object>> filteredList = new ArrayList<>();
for (Map<String, Object> dataItem : dataList) {
// 遍历Map中的所有值,检查是否包含关键词
for (Object value : dataItem.values()) {
if (value.toString().contains(keyword)) {
filteredList.add(dataItem);
break; // 找到一个匹配项后就跳出当前循环,避免重复添加
}
}
}
return filteredList;
}

// 实现
@ApiOperation(value = "关键字查询", tags = "关键字查询")
@GetMapping("/queryByKey")
public Result<?> queryByKey(@RequestParam String key) throws ContractException, IOException {

// 查出全部活动
byte[] queryActive = contract.evaluateTransaction("queryAllActive");
String resultStringActive = new String(queryActive, StandardCharsets.UTF_8);
List<Map<String, Object>> resultActiveList = Utils.parseJsonString(resultStringActive);
List<String> stringList = new ArrayList<>();
for (Map<String,Object> map : resultActiveList) {
map.put("class","0");
String mapString = Utils.convertToJsonMap(map);
stringList.add(mapString);
}

// 找出全部商品
byte[] queryGoods = contract.evaluateTransaction("queryGoods");
String resultStringGoods = new String(queryGoods, StandardCharsets.UTF_8);
List<Map<String, Object>> resultGoodsList = Utils.parseJsonString(resultStringGoods);
for (Map<String,Object> map : resultGoodsList) {
map.put("class","1");
String mapString = Utils.convertToJsonMap(map);
stringList.add(mapString);
}
List<Map<String, Object>> maps = parseJsonString(String.valueOf(stringList));
List<Map<String, Object>> filteredResult = Utils.filterByKeyword(maps, key);

System.out.println(filteredResult);

return Result.success(filteredResult);
}