亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java List包裝類型,封裝對象問題

java List包裝類型,封裝對象問題

Helenr 2019-02-23 21:10:20
比如,有兩個類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>就可以了。

查看完整回答
反對 回復 2019-03-01
?
德瑪西亞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);
        });
查看完整回答
反對 回復 2019-03-01
  • 2 回答
  • 0 關注
  • 439 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號