比如,有两个类A、B:
public class A{
private int a1;
private int a2;
private B b;
//getter setter
}
public class B{
private int b1;
private int b2;
private int a1;
//getter setter
}
public static void main(String[] args) {
Set<A> arr = service1.findList();
List<B> arr2 = service2.findList();
}
现在我需要,arr中item的a1如果等于arr2的item2的a1,就把item2放到item的b属性中,正常来说这样子
public static void main(String[] args){
Set<A> arr = service1.findList();
List<B> arr2 = service2.findList();
Iterator<A> it = arr .iterator();
while(it.hasNext()){
A a = it.next();
arr2.forEach(b->{
if(a.getA1() == b.getA1()){
a.setB(b);
return;
}
});
}
}
但是一坨这样子双循环看到都恶心,有没有好的方法,目前用jdk8
2 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
单纯从效率上考虑,你这样子双循环的复杂度是O(n^2),其实可以优化的:
先做一个Map<Integer, B>
,即a1->B
的映射,再遍历Set<A>
就可以了。
德玛西亚99
TA贡献1770条经验 获得超3个赞
一楼正解,用java8的lambda表达式可以很简练的实现:
Map<Integer, B> bMap = arr2.stream().collect(Collectors.toMap(B::getA1, Function.identity()));
arr.forEach(a -> {
B b = bMap.get(a.getA1());
a.setB(b);
});
添加回答
举报
0/150
提交
取消