Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;

import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Ordering;
import com.google.common.primitives.Ints;
import java.util.*;

public class Main {
    public static <T> Comparator<Collection<? extends T>> setComparator(
            final Comparator<? super T> elementComparator) {
        return new Comparator<Collection<? extends T>>() {
            @Override
            public int compare(Collection<? extends T> list1, Collection<? extends T> list2) {
                return compareAsSet(elementComparator, list1, list2);
            }
        };
    }

    public static <T extends Comparable<T>> int compareAsSet(Collection<? extends T> set1,
            Collection<? extends T> set2) {
        int res = Ints.compare(set1.size(), set2.size());
        if (res != 0)
            return res;

        SortedSet<? extends T> sortedSet1 = toNaturalSortedSet(set1);
        SortedSet<? extends T> sortedSet2 = toNaturalSortedSet(set2);

        Iterator<? extends T> elements2 = set2.iterator();
        for (T element1 : set1) {
            res = element1.compareTo(elements2.next());
            if (res != 0)
                return res;
        }
        return 0;
    }

    public static <T> int compareAsSet(Comparator<? super T> elementComparator, Collection<? extends T> list1,
            Collection<? extends T> list2) {
        int res = Ints.compare(list1.size(), list2.size());
        if (res != 0)
            return res;

        SortedSet<? extends T> set1 = toSortedSet(elementComparator, list1);
        SortedSet<? extends T> set2 = toSortedSet(elementComparator, list2);

        Iterator<? extends T> elements2 = set2.iterator();
        for (T element1 : set1) {
            res = elementComparator.compare(element1, elements2.next());
            if (res != 0)
                return res;
        }
        return 0;
    }

    private static <T> SortedSet<? extends T> toNaturalSortedSet(Collection<? extends T> collection) {
        if (isNaturalSortedSet(collection)) {
            return (SortedSet<? extends T>) collection;
        }
        return ImmutableSortedSet.copyOf(collection);
    }

    private static <T> SortedSet<? extends T> toSortedSet(Comparator<? super T> elementComparator,
            Collection<? extends T> collection) {
        if (collection instanceof SortedSet) {
            SortedSet<? extends T> sortedSet = (SortedSet<? extends T>) collection;
            Comparator<?> comparator = sortedSet.comparator();
            if (comparator != null && comparator.equals(elementComparator)) {
                return sortedSet;
            }
        }
        return ImmutableSortedSet.copyOf(elementComparator, collection);
    }

    public static <T> boolean isNaturalSortedSet(Iterable<? extends T> it) {
        if (it instanceof SortedSet) {
            SortedSet<? extends T> sortedSet = (SortedSet<? extends T>) it;
            Comparator<?> comparator = sortedSet.comparator();
            return (comparator == null) || comparator.equals(Ordering.natural());
        }
        return false;
    }
}