对于一个项目,我需要找到2套的并集,交集,差异和异或。每个方法最多只能包含3行代码。到目前为止,我有一些可行的方法,但是我一生都无法看到如何缩小差异并将异或方法缩减到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)));


为您的差异方法,和

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


用于您的xor方法。

编辑:

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




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


由于您的inter()返回一个TreeSet,因此也可以正常工作。

关于java - Java:在3行或更少的行中找到2个集合的并集,交集,diff和xor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23137294/

10-09 09:27