在java开发过程中我们往往会遇到对两个集合取交集操作。譬如如下场景:
在权限管理中我们选择一个用户对用户菜单权限进行选择然后统一保存。我们的操作往往是这样的:
第一步:移除当前用户现有权限。
第二步:新增所选择的权限。
但是这样似乎并不是很理想,有时候我们对权限根本没有任何操作或者做很少的改动我们就需要全部移除,然后全部新增。
我推荐操作方法如下:
如果选择的菜单权限集合成为listA,当前用户所有的权限集合为listB。
我们只需删除:listB和listA的差集。新增listA和listB的差集即可。那如何操作呢?
两层循环判断?太繁琐,java8提供的Stream即可很好解决如下:
List<UserPower> listCreate= listA.stream(). filter(a-> listB.stream().allMatch(b-> !a.getPowerId().equals(b.getPowerId()))).collect(Collectors.toList());
如上代码即可获得listA-listB方便,快捷;