海量数据查询匹配,有哪些高效的实现方案?

sinat_27054329 2020-03-07 06:13:03
拿数据二中的value值替换成数值一的key值
数据一数据二根据id可以对应
Java实现,有哪些比较好的高效率做法呢
有没有大侠给点思考或者方案


数据一:
[
{
"id": "1000001",
"a": "aValue",
"b": "bValue",
"c": "cValue"
},
{
"id": "1000002",
"e": "eValue",
"f": "fValue",
"g": "gValue",
"h": "hvalue"
}
]
---------------------------------------
数据二:
[
{
"id": "1000001",
"a": "A",
"b": "B",
"c": "C"
},
{
"id": "1000002",
"e": "E",
"f": "F",
"g": "G",
"h": "H"
}
]
---------------------------------------
结果:
[
{
"id": "1000001",
"A": "aValue",
"B": "bValue",
"C": "cValue"
},
{
"id": "1000002",
"E": "eValue",
"F": "fValue",
"G": "gValue",
"H": "hvalue"
}
]

...全文
462 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_27054329 2020-03-12
  • 打赏
  • 举报
回复
引用 8 楼 James灬Gosling 的回复:
算了,还是给你写完吧! public static void main(String[] args) { //准备数据 List<Map<String, String>> data1 = new ArrayList<>(); Map<String, String> data1Map = new HashMap<>(); data1Map.put("id", "1000001"); data1Map.put("a", "aValue"); data1Map.put("b", "bValue"); data1Map.put("c", "cValue"); data1.add(data1Map); Map<String, String> data2Map = new HashMap<>(); data2Map.put("id", "1000002"); data2Map.put("e", "eValue"); data2Map.put("f", "fValue"); data2Map.put("g", "gValue"); data2Map.put("h", "hValue"); data1.add(data2Map); List<Map<String, String>> data2 = new ArrayList<>(); Map<String, String> data3Map = new HashMap<>(); data3Map.put("id", "1000001"); data3Map.put("a", "A"); data3Map.put("b", "B"); data3Map.put("c", "C"); data2.add(data3Map); Map<String, String> data4Map = new HashMap<>(); data4Map.put("id", "1000002"); data4Map.put("e", "E"); data4Map.put("f", "F"); data4Map.put("g", "G"); data4Map.put("h", "H"); data2.add(data4Map); //开始操作 //分组数据2 Map<String, List<Map<String, String>>> groupIdMap = data2.stream().collect(Collectors.groupingBy(e -> e.get("id"))); //遍历数据1 List<Map<String, String>> result = new ArrayList<>(); data1.stream().forEach(e -> { Map<String, String> item = groupIdMap.get(e.get("id")).get(0);//数据2的item List<String> newKeys = new ArrayList<>(); item.values().stream().forEach(v -> { newKeys.add(v); }); List<String> newValues = new ArrayList<>(); e.forEach((k, v) -> newValues.add(v)); Map<String, String> resultMap = new HashMap<>(); for (int i = 0; i < newKeys.size(); i++) { resultMap.put(newKeys.get(i), newValues.get(i)); } result.add(resultMap); }); System.out.println(result); }
多谢大佬
戎码一生灬 2020-03-11
  • 打赏
  • 举报
回复
算了,还是给你写完吧!








public static void main(String[] args) {
//准备数据
List<Map<String, String>> data1 = new ArrayList<>();
Map<String, String> data1Map = new HashMap<>();
data1Map.put("id", "1000001");
data1Map.put("a", "aValue");
data1Map.put("b", "bValue");
data1Map.put("c", "cValue");
data1.add(data1Map);
Map<String, String> data2Map = new HashMap<>();
data2Map.put("id", "1000002");
data2Map.put("e", "eValue");
data2Map.put("f", "fValue");
data2Map.put("g", "gValue");
data2Map.put("h", "hValue");
data1.add(data2Map);
List<Map<String, String>> data2 = new ArrayList<>();
Map<String, String> data3Map = new HashMap<>();
data3Map.put("id", "1000001");
data3Map.put("a", "A");
data3Map.put("b", "B");
data3Map.put("c", "C");
data2.add(data3Map);
Map<String, String> data4Map = new HashMap<>();
data4Map.put("id", "1000002");
data4Map.put("e", "E");
data4Map.put("f", "F");
data4Map.put("g", "G");
data4Map.put("h", "H");
data2.add(data4Map);
//开始操作
//分组数据2
Map<String, List<Map<String, String>>> groupIdMap = data2.stream().collect(Collectors.groupingBy(e -> e.get("id")));
//遍历数据1
List<Map<String, String>> result = new ArrayList<>();
data1.stream().forEach(e -> {
Map<String, String> item = groupIdMap.get(e.get("id")).get(0);//数据2的item
List<String> newKeys = new ArrayList<>();
item.values().stream().forEach(v -> {
newKeys.add(v);
});
List<String> newValues = new ArrayList<>();
e.forEach((k, v) -> newValues.add(v));
Map<String, String> resultMap = new HashMap<>();
for (int i = 0; i < newKeys.size(); i++) {
resultMap.put(newKeys.get(i), newValues.get(i));
}
result.add(resultMap);

});
System.out.println(result);
}
戎码一生灬 2020-03-11
  • 打赏
  • 举报
回复
引用 6 楼 sinat_27054329 的回复:
[quote=引用 5 楼 James灬Gosling 的回复:]
public static void main(String[] args) {
//准备数据
List<Map<String, String>> data1 = new ArrayList<>();
Map<String, String> data1Map = new HashMap<>();
data1Map.put("id", "1000001");
data1Map.put("a", "aValue");
data1Map.put("b", "bValue");
data1Map.put("c", "cValue");
data1.add(data1Map);
Map<String, String> data2Map = new HashMap<>();
data2Map.put("id", "1000002");
data2Map.put("e", "eValue");
data2Map.put("f", "fValue");
data2Map.put("g", "gValue");
data2Map.put("h", "hValue");
data1.add(data2Map);
List<Map<String, String>> data2 = new ArrayList<>();
Map<String, String> data3Map = new HashMap<>();
data3Map.put("id", "1000001");
data3Map.put("a", "A");
data3Map.put("b", "B");
data3Map.put("c", "C");
data2.add(data3Map);
Map<String, String> data4Map = new HashMap<>();
data4Map.put("id", "1000002");
data4Map.put("e", "E");
data4Map.put("f", "F");
data4Map.put("g", "G");
data4Map.put("h", "H");
data2.add(data4Map);
//开始操作
//分组数据2
Map<String, List<Map<String, String>>> groupIdMap = data2.stream().collect(Collectors.groupingBy(e -> e.get("id")));
//遍历数据1
List<Map<String, String>> result = new ArrayList<>();
data1.stream().forEach(e -> {
Map<String, String> item = groupIdMap.get(e.get("id")).get(0);
Map<String, String> resultMap = new HashMap<>();
item.values().stream().forEach(v -> {
resultMap.put(v, "id");
});
});
}


大佬这是伪代码么,结果不对[/quote]


写了一半,急于下班,就懒得写了,思路就是这个思路,你参照一下
sinat_27054329 2020-03-11
  • 打赏
  • 举报
回复
引用 5 楼 James灬Gosling 的回复:
public static void main(String[] args) { //准备数据 List<Map<String, String>> data1 = new ArrayList<>(); Map<String, String> data1Map = new HashMap<>(); data1Map.put("id", "1000001"); data1Map.put("a", "aValue"); data1Map.put("b", "bValue"); data1Map.put("c", "cValue"); data1.add(data1Map); Map<String, String> data2Map = new HashMap<>(); data2Map.put("id", "1000002"); data2Map.put("e", "eValue"); data2Map.put("f", "fValue"); data2Map.put("g", "gValue"); data2Map.put("h", "hValue"); data1.add(data2Map); List<Map<String, String>> data2 = new ArrayList<>(); Map<String, String> data3Map = new HashMap<>(); data3Map.put("id", "1000001"); data3Map.put("a", "A"); data3Map.put("b", "B"); data3Map.put("c", "C"); data2.add(data3Map); Map<String, String> data4Map = new HashMap<>(); data4Map.put("id", "1000002"); data4Map.put("e", "E"); data4Map.put("f", "F"); data4Map.put("g", "G"); data4Map.put("h", "H"); data2.add(data4Map); //开始操作 //分组数据2 Map<String, List<Map<String, String>>> groupIdMap = data2.stream().collect(Collectors.groupingBy(e -> e.get("id"))); //遍历数据1 List<Map<String, String>> result = new ArrayList<>(); data1.stream().forEach(e -> { Map<String, String> item = groupIdMap.get(e.get("id")).get(0); Map<String, String> resultMap = new HashMap<>(); item.values().stream().forEach(v -> { resultMap.put(v, "id"); }); }); }
大佬这是伪代码么,结果不对
戎码一生灬 2020-03-10
  • 打赏
  • 举报
回复
public static void main(String[] args) {
//准备数据
List<Map<String, String>> data1 = new ArrayList<>();
Map<String, String> data1Map = new HashMap<>();
data1Map.put("id", "1000001");
data1Map.put("a", "aValue");
data1Map.put("b", "bValue");
data1Map.put("c", "cValue");
data1.add(data1Map);
Map<String, String> data2Map = new HashMap<>();
data2Map.put("id", "1000002");
data2Map.put("e", "eValue");
data2Map.put("f", "fValue");
data2Map.put("g", "gValue");
data2Map.put("h", "hValue");
data1.add(data2Map);
List<Map<String, String>> data2 = new ArrayList<>();
Map<String, String> data3Map = new HashMap<>();
data3Map.put("id", "1000001");
data3Map.put("a", "A");
data3Map.put("b", "B");
data3Map.put("c", "C");
data2.add(data3Map);
Map<String, String> data4Map = new HashMap<>();
data4Map.put("id", "1000002");
data4Map.put("e", "E");
data4Map.put("f", "F");
data4Map.put("g", "G");
data4Map.put("h", "H");
data2.add(data4Map);
//开始操作
//分组数据2
Map<String, List<Map<String, String>>> groupIdMap = data2.stream().collect(Collectors.groupingBy(e -> e.get("id")));
//遍历数据1
List<Map<String, String>> result = new ArrayList<>();
data1.stream().forEach(e -> {
Map<String, String> item = groupIdMap.get(e.get("id")).get(0);
Map<String, String> resultMap = new HashMap<>();
item.values().stream().forEach(v -> {
resultMap.put(v, "id");
});
});
}
  • 打赏
  • 举报
回复
引用 2 楼 sinat_27054329 的回复:
[quote=引用 1 楼 似水流年风萧兮 的回复:]
数据量大的时候,把这两个数据分别存入数据库,然后再读出来组装,数据量小则自己写一个解析类


关键两组数据读出来怎么组装?一条条循环遍历么?有没有高效的方法[/quote]
都是需要循环的,你要通过降低循环的时间复杂度来提高效率
sinat_27054329 2020-03-09
  • 打赏
  • 举报
回复
有没有大佬知道
sinat_27054329 2020-03-08
  • 打赏
  • 举报
回复
引用 1 楼 似水流年风萧兮 的回复:
数据量大的时候,把这两个数据分别存入数据库,然后再读出来组装,数据量小则自己写一个解析类
关键两组数据读出来怎么组装?一条条循环遍历么?有没有高效的方法
  • 打赏
  • 举报
回复
数据量大的时候,把这两个数据分别存入数据库,然后再读出来组装,数据量小则自己写一个解析类

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧