All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gs.collections.impl.set.immutable.ImmutableEmptySet Maven / Gradle / Ivy

Go to download

GS Collections is a collections framework for Java. It has JDK-compatible List, Set and Map implementations with a rich API and set of utility classes that work with any JDK compatible Collections, Arrays, Maps or Strings. The iteration protocol was inspired by the Smalltalk collection framework.

There is a newer version: 7.0.3
Show newest version
/*
 * Copyright 2013 Goldman Sachs.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.gs.collections.impl.set.immutable;

import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;

import com.gs.collections.api.block.function.Function;
import com.gs.collections.api.block.function.Function0;
import com.gs.collections.api.block.function.Function2;
import com.gs.collections.api.block.function.primitive.DoubleObjectToDoubleFunction;
import com.gs.collections.api.block.function.primitive.IntObjectToIntFunction;
import com.gs.collections.api.block.function.primitive.LongObjectToLongFunction;
import com.gs.collections.api.block.predicate.Predicate;
import com.gs.collections.api.block.predicate.Predicate2;
import com.gs.collections.api.block.procedure.Procedure;
import com.gs.collections.api.block.procedure.Procedure2;
import com.gs.collections.api.block.procedure.primitive.ObjectIntProcedure;
import com.gs.collections.api.multimap.MutableMultimap;
import com.gs.collections.api.partition.set.PartitionImmutableSet;
import com.gs.collections.api.set.ImmutableSet;
import com.gs.collections.api.tuple.Pair;
import com.gs.collections.impl.EmptyIterator;
import com.gs.collections.impl.factory.Sets;
import com.gs.collections.impl.partition.set.PartitionUnifiedSet;
import net.jcip.annotations.Immutable;

/**
 * This is a zero element {@link ImmutableSet} which is created by calling the Sets.immutable.of() method.
 */
@Immutable
final class ImmutableEmptySet
        extends AbstractImmutableSet
        implements Serializable
{
    static final ImmutableSet INSTANCE = new ImmutableEmptySet();
    private static final PartitionImmutableSet EMPTY = new PartitionUnifiedSet().toImmutable();

    private static final long serialVersionUID = 1L;

    @Override
    public boolean equals(Object other)
    {
        if (other == this)
        {
            return true;
        }
        return other instanceof Set && ((Set) other).isEmpty();
    }

    @Override
    public int hashCode()
    {
        return 0;
    }

    @Override
    public ImmutableSet newWith(T element)
    {
        return Sets.immutable.of(element);
    }

    @Override
    public ImmutableSet newWithAll(Iterable elements)
    {
        return Sets.immutable.ofAll(elements);
    }

    @Override
    public ImmutableSet newWithout(T element)
    {
        return this;
    }

    @Override
    public ImmutableSet newWithoutAll(Iterable elements)
    {
        return this;
    }

    public int size()
    {
        return 0;
    }

    @Override
    public boolean contains(Object obj)
    {
        return false;
    }

    public void forEach(Procedure procedure)
    {
    }

    @Override
    public void forEachWithIndex(ObjectIntProcedure objectIntProcedure)
    {
    }

    @Override
    public 

void forEachWith(Procedure2 procedure, P parameter) { } @Override public T getFirst() { return null; } @Override public T getLast() { return null; } public Iterator iterator() { return EmptyIterator.getInstance(); } @Override public T min(Comparator comparator) { throw new NoSuchElementException(); } @Override public T max(Comparator comparator) { throw new NoSuchElementException(); } @Override public T min() { throw new NoSuchElementException(); } @Override public T max() { throw new NoSuchElementException(); } @Override public > T minBy(Function function) { throw new NoSuchElementException(); } @Override public > T maxBy(Function function) { throw new NoSuchElementException(); } @Override public ImmutableSet> zip(Iterable that) { return Sets.immutable.of(); } @Override public >> R zip(Iterable that, R target) { return target; } @Override public ImmutableSet> zipWithIndex() { return Sets.immutable.of(); } @Override public >> R zipWithIndex(R target) { return target; } @Override public ImmutableSet select(Predicate predicate) { return this; } @Override public ImmutableSet reject(Predicate predicate) { return this; } @Override public PartitionImmutableSet partition(Predicate predicate) { return (PartitionImmutableSet) EMPTY; } @Override public ImmutableSet collect(Function function) { return Sets.immutable.of(); } @Override public ImmutableSet collectIf(Predicate predicate, Function function) { return Sets.immutable.of(); } @Override public ImmutableSet flatCollect(Function> function) { return Sets.immutable.of(); } @Override public > R groupBy(Function function, R target) { return target; } @Override public > R groupByEach(Function> function, R target) { return target; } @Override public boolean isEmpty() { return true; } @Override public boolean notEmpty() { return false; } @Override public > R select(Predicate predicate, R target) { return target; } @Override public > R selectWith(Predicate2 predicate, P parameter, R targetCollection) { return targetCollection; } @Override public > R reject(Predicate predicate, R target) { return target; } @Override public > R rejectWith(Predicate2 predicate, P parameter, R targetCollection) { return targetCollection; } @Override public > R collect(Function function, R target) { return target; } @Override public > R collectWith(Function2 function, P parameter, R targetCollection) { return targetCollection; } @Override public > R collectIf(Predicate predicate, Function function, R target) { return target; } @Override public T detectIfNone(Predicate predicate, Function0 function) { return function.value(); } @Override public > R flatCollect(Function> function, R target) { return target; } @Override public T detect(Predicate predicate) { return null; } @Override public int count(Predicate predicate) { return 0; } @Override public

int countWith(Predicate2 predicate, P parameter) { return 0; } @Override public boolean anySatisfy(Predicate predicate) { return false; } @Override public boolean allSatisfy(Predicate predicate) { return true; } @Override public boolean noneSatisfy(Predicate predicate) { return true; } @Override public

boolean anySatisfyWith(Predicate2 predicate, P parameter) { return false; } @Override public

boolean allSatisfyWith(Predicate2 predicate, P parameter) { return true; } @Override public

boolean noneSatisfyWith(Predicate2 predicate, P parameter) { return true; } @Override public IV injectInto(IV injectedValue, Function2 function) { return injectedValue; } @Override public int injectInto(int injectedValue, IntObjectToIntFunction intObjectToIntFunction) { return injectedValue; } @Override public long injectInto(long injectedValue, LongObjectToLongFunction longObjectToLongFunction) { return injectedValue; } @Override public double injectInto(double injectedValue, DoubleObjectToDoubleFunction doubleObjectToDoubleFunction) { return injectedValue; } @Override public String toString() { return "[]"; } @Override public String makeString() { return ""; } @Override public String makeString(String separator) { return ""; } @Override public String makeString(String start, String separator, String end) { return start + end; } @Override public void appendString(Appendable appendable) { } @Override public void appendString(Appendable appendable, String separator) { } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } private Object writeReplace() { return new ImmutableSetSerializationProxy(this); } }