有2个对象的arraylists,其中第二个有一个相关的字段,我想填充第一个。
public ArrayList<object1> updateAccountWithGSAM(ArrayList<object1> o1, ArrayList<object2> o2) {
ArrayList<object1> accs = new ArrayList<object1>();
for (object1 acc : o1) {
ArrayList<String> o2s= new ArrayList<String>();
for (object2 g : o2) {
if (g.getfield() != null) {
if (acc.getId().equals(g.getobject1())) {
o2s.add(g.getCode());
}
}
}
acc.setGSAM_code(o2s);
accs.add(acc);
}
return accs;
}
一般情况下,当数据很小时,这种方法很好,但是当数据集变大时会遇到问题(obj1和2在prod中每个大小约为500,000)。
不确定我可以采取哪些优化措施来加快速度,或者是否有替代嵌套for循环以实现我想要实现的目标?
答案 0 :(得分:1)
我没有编译代码,但是这样的东西应该可以工作:
public ArrayList<object1> updateAccountWithGSAM(ArrayList<object1> o1, ArrayList<object2> o2) {
HashMap<String, ArrayList<String>> reverseMap = new HashMap<String, ArrayList<String>>()
for (object2 g : o2) {
if (g.getfield() != null) {
ArrayList<String> accs1 = reverseMap.get(g.getobject1());
if(accs1 == null) {
accs1 = new ArrayList<String>()
reverseMap.put(g.getobject1(), acc1)
}
accs1.add(o2s);
}
}
ArrayList<object1> accs = new ArrayList<object1>();
for (object1 acc : o1) {
ArrayList<String> o2s= new ArrayList<String>();
if(reverseMap.get(acc.getCode()) != null) {
acc.setGSAM_code(o2s);
accs.add(acc);
}
}
return accs;
}