1. 背景
现在日常工作中经常会遇到两组数据对比碰撞的需求,菜菜不才,之前写了一个不怎么优雅的代码才解决了问题,而且还是只能对比String的,菜菜有空后赶紧写了一个比较优雅的方式解决了list比对的问题。
2. 代码
2.1 原始版本
public static Map<String,List<String>> stringIntersectionDelete(List<String> listA, List<String> listB){
Map<String,List<String>> returnMap=new HashMap<>(16);
List<String> repeatList=new ArrayList<>();
for (Iterator<String> itA = listA.iterator(); itA.hasNext();)
{
String temp = itA.next();
for (int i = 0; i < listB.size(); i++)
{
if (temp.equals(listB.get(i)))
{
repeatList.add(temp);
itA.remove();
}
}
}
returnMap.put("repeatList",repeatList);
returnMap.put("returnList",listA);
return returnMap;
}
2.2 改良版本
List<String> list1 = Arrays.asList("123", "456", "789", "987", "654", "321","222");
List<String> list2 = Arrays.asList("123", "456", "789");
Map<Boolean, List<String>> collect = list1.stream().collect(Collectors.partitioningBy(obj ->
list2.stream().anyMatch(obj2 -> obj.equals(obj2))
));
System.out.println(collect);
3. 结语
可以看到改良后的代码是比较优雅的,必经就两行。内部底层也是使用了两层for所以时间维度上是一样的,简介度却高了很多,最主要的是,还可以用在Object 上,只要挑出对比值,或者整个对象toString对比即可,使用程度也是有提升的。所以还是要多看一点新特性啊。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)