Java:在3行或更短的时间内找到2个集合的并集、交集、diff和xor



对于一个项目,我需要找到2个集合的并集、交集、diff和xor。每个方法最多只能包含3行代码。到目前为止,我有一些工作方法,但我一辈子都看不到如何将差异和xor方法压缩到3行或更少的代码。以下是我目前所拥有的:

static TreeSet<String> union( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1 = new TreeSet<String>(set1);
    s1.addAll(set2);
    return s1;
}
static TreeSet<String> inter( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1 = new TreeSet<String>(set1);
     s1.retainAll(set2);
    return s1; 
}
static TreeSet<String> diff( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1= new TreeSet<String>(inter(set1, set2));
    TreeSet<String> s2 = new TreeSet<String>(set1);
    s2.removeAll(s1);
    return s2; 
}
static TreeSet<String> xor( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1 = new TreeSet<String>(union(set1,set2));
    TreeSet<String> s2 = new TreeSet<String>(inter(set1, set2));
    s1.removeAll(s2);
    return s1; 
}

我一直盯着它看,但它不会来找我。提前感谢你抽出时间。我知道这可能是一个简单的解决方案,但我没有看到。

如果不使用其中一个辅助变量,则可以每行保存一行。相反,写入

s2.removeAll(new TreeSet<String>(inter(set1, set2)));

用于您的diff方法和

s1.removeAll(new TreeSet<String>(inter(set1, set2)));

用于您的xor方法。

编辑:

s2.removeAll(inter(set1, set2));

s1.removeAll(inter(set1, set2)));

同样有效,因为您的inter()返回一个TreeSet。

您可以尝试以下操作:

static TreeSet<String> xor( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1 = new TreeSet<String>(union(set1,set2));
    s1.removeAll(new TreeSet<String>(inter(set1, set2)));
    return s1; 
}

相关内容

  • 没有找到相关文章

最新更新