collectionUtil.diff 太过爱你忘了你带给我的痛 2023-01-12 01:46 127阅读 0赞 1.CollectionUtils.diff(Collection c1, Collection c2),返回集合c2不包含集合c1的元素 public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("1"); list1.add("2"); List<String> list2 = new ArrayList<>(); list2.add("1"); list2.add("3"); list2.add("4"); Collection diff1 = CollectionUtils.diff(list1, list2);// list1中有,list2中没有的元素 System.out.println(diff1.toString()); // [2] Collection diff2 = CollectionUtils.diff(list2, list1);// list1中没有,list2中有的元素 System.out.println(diff2.toString());// [3, 4] Collection sameElement = CollectionUtils.diff(list1, diff1); // list1和list2中都有的元素 System.out.println(sameElement);// [1] } * // 源码 public static <T> Collection<T> diff(Collection<T> c1, Collection<T> c2) { if (c1 != null && c1.size() != 0 && c2 != null && c2.size() != 0) { Collection<T> difference = new ArrayList(); Iterator i$ = c1.iterator(); while(i$.hasNext()) { T item = i$.next(); if (!c2.contains(item)) { difference.add(item); } } return difference; } else { return c1; } } * 2.集合的removeAll(Collection<?> c)方法:将容器中所有包含集合c的元素移除 public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("1"); list1.add("2"); List<String> list2 = new ArrayList<>(); list2.add("1"); list2.add("3"); list2.add("4"); Collection diffResult = new ArrayList(list2); Collection sameResult = new ArrayList(list2); diffResult.removeAll(list1);// 删除含有list1中的所有元素 System.out.println(diffResult); // [3, 4] sameResult.removeAll(diffResult); // list1和list2中相同的元素 System.out.println(sameResult);// [1] } * // removeAll源码 public boolean removeAll(Collection<?> c) { Objects.requireNonNull(c); boolean modified = false; for (Iterator<Map.Entry<K,V>> i = iterator(); i.hasNext(); ) { if (c.contains(i.next())) { i.remove(); modified = true; } } return modified; } * 3.如果是直接判断两个集合是否有相同数据,可用`Collections.disjoint(Collection<?> c1, Collection<?> c2)` if (Collections.disjoint(list1, list2)) { System.out.println("有相同的元素"); }else{ System.out.println("没有相同的元素"); }
还没有评论,来说两句吧...