⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setoperations.java

📁 java 的源代码
💻 JAVA
字号:
package com.reddragon2046.base.utilities.data.algorithms;

import com.reddragon2046.base.utilities.data.BinaryPredicate;
import com.reddragon2046.base.utilities.data.OutputIterator;
import com.reddragon2046.base.utilities.data.predicates.LessEqualPredicate;
import com.reddragon2046.base.utilities.data.predicates.LessPredicate;
import com.reddragon2046.base.utilities.data.util.CollectionFactory;
import com.reddragon2046.base.utilities.data.util.InsertIterator;
import java.util.*;

// Referenced classes of package com.reddragon2046.base.utilities.data.algorithms:
//            OrderedSetOperations

public final class SetOperations
{
    private static final class Params
    {

        public Collection getSet1()
        {
            return m_set1;
        }

        public Collection getSet2()
        {
            return m_set2;
        }

        public BinaryPredicate getSortPredicate()
        {
            return m_sortPredicate;
        }

        private Collection m_set1;
        private Collection m_set2;
        private BinaryPredicate m_sortPredicate;

        public Params(Collection set1, Collection set2)
        {
            if(SetOperations.areSortCompatible(set1, set2))
            {
                Comparator comparator = ((SortedSet)set1).comparator();
                if(comparator != null)
                    m_sortPredicate = new LessPredicate(comparator);
                else
                    m_sortPredicate = new LessPredicate();
                m_set1 = set1;
                m_set2 = set2;
            } else
            {
                m_set1 = SetOperations.getSortedList(set1);
                m_set2 = SetOperations.getSortedList(set2);
                m_sortPredicate = new LessPredicate();
            }
        }
    }


    public SetOperations()
    {
    }

    public static boolean isSuperset(Collection set1, Collection set2, BinaryPredicate comparator)
    {
        return OrderedSetOperations.isSuperset(set1, set2, comparator);
    }

    public static boolean isSuperset(Collection set1, Collection set2)
    {
        Params params = new Params(set1, set2);
        return OrderedSetOperations.isSuperset(params.getSet1(), params.getSet2(), params.getSortPredicate());
    }

    private static boolean areSortCompatible(Collection collection1, Collection collection2)
    {
        boolean compatible = false;
        if((collection1 instanceof SortedSet) && (collection2 instanceof SortedSet))
        {
            Comparator comparator1 = ((SortedSet)collection1).comparator();
            Comparator comparator2 = ((SortedSet)collection2).comparator();
            if(comparator1 == null && comparator2 == null)
                compatible = true;
            else
            if(comparator1 != null && comparator1.equals(comparator2))
                compatible = true;
        }
        return compatible;
    }

    private static Comparator getComparatorIfSorted(Collection collection1, Collection collection2)
    {
        Comparator sortedComparator = null;
        if(areSortCompatible(collection1, collection2))
        {
            Comparator comparator1 = ((SortedSet)collection1).comparator();
            sortedComparator = comparator1;
        }
        return sortedComparator;
    }

    public static OutputIterator setUnion(Collection set1, Collection set2, OutputIterator result, BinaryPredicate sortPredicate)
    {
        return OrderedSetOperations.setUnion(set1, set2, result, sortPredicate);
    }

    public static Collection setUnion(Collection set1, Collection set2)
    {
        Collection result = getResultCollection(set1.getClass());
        setUnion(set1, set2, ((OutputIterator) (new InsertIterator(result))));
        return result;
    }

    public static OutputIterator setUnion(Collection set1, Collection set2, OutputIterator result)
    {
        Params params = new Params(set1, set2);
        return setUnion(params.getSet1(), params.getSet2(), result, params.getSortPredicate());
    }

    public static Collection setUnion(Collection collection1, Collection collection2, BinaryPredicate comparator)
    {
        Collection result = getResultCollection(collection1.getClass());
        setUnion(collection1, collection2, ((OutputIterator) (new InsertIterator(result))), comparator);
        return result;
    }

    public static OutputIterator setIntersection(Collection collection1, Collection collection2, OutputIterator result, BinaryPredicate comparator)
    {
        return OrderedSetOperations.setIntersection(collection1, collection2, result, comparator);
    }

    public static Collection setIntersection(Collection collection1, Collection collection2)
    {
        Collection result = getResultCollection(collection1.getClass());
        setIntersection(collection1, collection2, ((OutputIterator) (new InsertIterator(result))));
        return result;
    }

    public static Collection setIntersection(Collection collection1, Collection collection2, BinaryPredicate comparator)
    {
        Collection result = getResultCollection(collection1.getClass());
        setIntersection(collection1, collection2, ((OutputIterator) (new InsertIterator(result))), comparator);
        return result;
    }

    public static OutputIterator setIntersection(Collection set1, Collection set2, OutputIterator result)
    {
        Params params = new Params(set1, set2);
        return setIntersection(params.getSet1(), params.getSet2(), result, params.getSortPredicate());
    }

    public static OutputIterator setDifference(Collection set1, Collection set2, OutputIterator result, BinaryPredicate sortPredicate)
    {
        return OrderedSetOperations.setDifference(set1, set2, result, sortPredicate);
    }

    public static Collection setDifference(Collection set1, Collection set2)
    {
        Collection result = getResultCollection(set1.getClass());
        setDifference(set1, set2, ((OutputIterator) (new InsertIterator(result))));
        return result;
    }

    public static OutputIterator setDifference(Collection set1, Collection set2, OutputIterator result)
    {
        Params params = new Params(set1, set2);
        return setDifference(params.getSet1(), params.getSet2(), result, params.getSortPredicate());
    }

    public static OutputIterator setSymmetricDifference(Collection set1, Collection set2, OutputIterator result, BinaryPredicate sortPredicate)
    {
        return OrderedSetOperations.setSymmetricDifference(set1, set2, result, sortPredicate);
    }

    public static Collection setSymmetricDifference(Collection set1, Collection set2)
    {
        Collection result = getResultCollection(set1.getClass());
        setSymmetricDifference(set1, set2, ((OutputIterator) (new InsertIterator(result))));
        return result;
    }

    public static OutputIterator setSymmetricDifference(Collection set1, Collection set2, OutputIterator result)
    {
        Params params = new Params(set1, set2);
        return setSymmetricDifference(params.getSet1(), params.getSet2(), result, params.getSortPredicate());
    }

    public static Collection setSymmetricDifference(Collection collection1, Collection collection2, BinaryPredicate comparator)
    {
        Collection result = getResultCollection(collection1.getClass());
        setSymmetricDifference(collection1, collection2, ((OutputIterator) (new InsertIterator(result))), comparator);
        return result;
    }

    private static List getSortedList(Collection c)
    {
        LinkedList list = new LinkedList(c);
        Collections.sort(list);
        return list;
    }

    private static Collection getResultCollection(Class collectionClass)
    {
        return CollectionFactory.create(collectionClass);
    }

    private static BinaryPredicate getCheckedComparator(BinaryPredicate comparator)
    {
        if(comparator == null)
            return new LessEqualPredicate();
        else
            return comparator;
    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -