当前位置:  开发笔记 > 编程语言 > 正文

Guava Sets.difference#isEmpty()行为

如何解决《GuavaSets.difference#isEmpty()行为》经验,为你挑选了1个好方法。

我不理解Guava的集合的行为#isremp()方法的区别:

  public static  SetView difference(final Set set1, final Set set2) {
    checkNotNull(set1, "set1");
    checkNotNull(set2, "set2");

    final Predicate notInSet2 = Predicates.not(Predicates.in(set2));
    return new SetView() {
      @Override public Iterator iterator() {
        return Iterators.filter(set1.iterator(), notInSet2);
      }
      @Override public int size() {
        return Iterators.size(iterator());
      }
      @Override public boolean isEmpty() {
        return set2.containsAll(set1);
      }
      @Override public boolean contains(Object element) {
        return set1.contains(element) && !set2.contains(element);
      }
  };
}


更确切地说,我不明白如何set2.containsAll(set1);使用它的结果isEmpty().

举个例子:

set1 = A,B

set2 = A,B,C,D,E

差异(C,D,E)肯定不会是空的.但Sets.difference(set1,set2).isEmpty()将返回true,因为(A,B,C,D,E).containsAll(A,B)为真.

即使javadoc说,我也不明白逻辑:

{@code set2}也可能包含{@code set1}中不存在的元素; 这些都被忽略了

我错了吗?我要填一个问题吗?

(我正在使用guava-18.0)



1> DPM..:

从guava文档"public static Sets.SetView difference(Set set1,Set set2)":

返回的集合包含set1包含但未包含在set2中的所有元素

如您所见,您的set1都不符合这些条件,因此差异集为空.

请注意,差异方法对于参数不是可交换的,并且差异集不是您在调用时所考虑的(C,D,E) difference(set1, set2);


实际上,我期待一种行为,例如`Sets.symmetricDifference`.感谢您的回复.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有