我已经使用for和if循环通过比较列表的内部JSON来查找列表的交集。我正在寻找使用CollectionUtils或Java 8或其他类似解决方案的解决方案。
private List<IBXLocation> compareIbxLocationDetails(List<IBXLocation> serviceIbxsForLoggedInUser,
List<IBXLocation> serviceIbxsForUser) {
List<IBXLocation> finalList=new ArrayList();
for (IBXLocation ibxForLoggedInUser : serviceIbxsForLoggedInUser) {
String ibxSelected=ibxForLoggedInUser.getIbx();
boolean ibxFound = false;
ibxLoop:for (IBXLocation permittedIBXForUser : serviceIbxsForUser) {
if (ibxSelected.equals(permittedIBXForUser.getIbx())) {
IBXLocation newIbx = new IBXLocation(ibxSelected);
List<Cage> newCageList=new ArrayList();
if (!CollectionUtils.isEmpty(ibxForLoggedInUser.getCageDetails())) {
for (Cage selectedCage : ibxForLoggedInUser.getCageDetails()) {
String loggedInSelectedCageStr = selectedCage.getCage();
for (Cage permittedCage : permittedIBXForUser.getCageDetails()) {
if (loggedInSelectedCageStr.equals(permittedCage.getCage())) {
newCageList.add(permittedCage);
}
}
newIbx.setCageDetails(newCageList);
}
finalList.add(newIbx);
}
ibxFound = true;
break ibxLoop;
}
}
}
return finalList;
}
答案 0 :(得分:1)
您可以使用
Set ibxForLoggedInUserToSet= new HashSet<IBXLocation>(ibxForLoggedInUser);
for(IBXLocation per: serviceIbxsForUser){
if (ibxForLoggedInUserToSet.contains(per)){
finalList.add(per);
}
}
答案 1 :(得分:0)
在org.apache.commons.collections4.ListUtils
中有一种方法public static <E> List<E> intersection(List<? extends E> list1, List<? extends E> list2)
答案 2 :(得分:0)
您可以利用Set
来获取交叉点:
public <T> intersect(List<T> firstList, List<T> secondList) {
Set<T> result = new HashSet<>();
result.addAll(firstList);
result.addAll(secondList);
return result;
}