比如,有兩個類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
提交
取消