为了账号安全,请及时绑定邮箱和手机立即绑定

java List包装类型,封装对象问题

java List包装类型,封装对象问题

www说 2019-05-24 11:19:43
比如,有两个类A、B:publicclassA{privateinta1;privateinta2;privateBb;//gettersetter}publicclassB{privateintb1;privateintb2;privateinta1;//gettersetter}publicstaticvoidmain(String[]args){Setarr=service1.findList();Listarr2=service2.findList();}现在我需要,arr中item的a1如果等于arr2的item2的a1,就把item2放到item的b属性中,正常来说这样子publicstaticvoidmain(String[]args){Setarr=service1.findList();Listarr2=service2.findList();Iteratorit=arr.iterator();while(it.hasNext()){Aa=it.next();arr2.forEach(b->{if(a.getA1()==b.getA1()){a.setB(b);return;}});}}但是一坨这样子双循环看到都恶心,有没有好的方法,目前用jdk8
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

单纯从效率上考虑,你这样子双循环的复杂度是O(n^2),其实可以优化的:
先做一个Map,即a1->B的映射,再遍历Set就可以了。
                            
查看完整回答
反对 回复 2019-05-24
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

一楼正解,用java8的lambda表达式可以很简练的实现:
MapbMap=arr2.stream().collect(Collectors.toMap(B::getA1,Function.identity()));
arr.forEach(a->{
Bb=bMap.get(a.getA1());
a.setB(b);
});
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 761 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号