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

com.google.common.collect.SortedMultisets Maven / Gradle / Ivy

There is a newer version: 2024.11.18751.20241128T090041Z-241100
Show newest version
/*
 * Copyright (C) 2011 The Guava Authors
 *
 * 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.google.common.collect;

import static com.google.common.collect.BoundType.CLOSED;
import static com.google.common.collect.BoundType.OPEN;
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.collect.Multiset.Entry;
import java.util.Comparator;
import java.util.Iterator;
import java.util.NavigableSet;
import java.util.NoSuchElementException;
import java.util.SortedSet;
import javax.annotation.Nullable;

/**
 *  Provides static utility methods for creating and working with
 *  {@link SortedMultiset} instances.
 *
 *  @author Louis Wasserman
 *
 * @deprecated The Google Guava Core Libraries are deprecated and will not be part of the AEM SDK after April 2023
 */
@GwtCompatible(emulated = true)
@Deprecated(since = "2022-12-01")
final class SortedMultisets {

    private SortedMultisets() {
    }

    /**
     *  A skeleton implementation for {@link SortedMultiset#elementSet}.
     *
     * @deprecated The Google Guava Core Libraries are deprecated and will not be part of the AEM SDK after April 2023
     */
    @Deprecated(since = "2022-12-01")
    static class ElementSet extends Multisets.ElementSet implements SortedSet {

        private final SortedMultiset multiset;

        ElementSet(SortedMultiset multiset) {
            this.multiset = multiset;
        }

        @Override
        final SortedMultiset multiset() {
            return multiset;
        }

        @Override
        public Comparator comparator() {
            return multiset().comparator();
        }

        @Override
        public SortedSet subSet(E fromElement, E toElement) {
            return multiset().subMultiset(fromElement, CLOSED, toElement, OPEN).elementSet();
        }

        @Override
        public SortedSet headSet(E toElement) {
            return multiset().headMultiset(toElement, OPEN).elementSet();
        }

        @Override
        public SortedSet tailSet(E fromElement) {
            return multiset().tailMultiset(fromElement, CLOSED).elementSet();
        }

        @Override
        public E first() {
            return getElementOrThrow(multiset().firstEntry());
        }

        @Override
        public E last() {
            return getElementOrThrow(multiset().lastEntry());
        }
    }

    /**
     *  A skeleton navigable implementation for {@link SortedMultiset#elementSet}.
     *
     * @deprecated The Google Guava Core Libraries are deprecated and will not be part of the AEM SDK after April 2023
     */
    @GwtIncompatible("Navigable")
    @Deprecated(since = "2022-12-01")
    static class NavigableElementSet extends ElementSet implements NavigableSet {

        NavigableElementSet(SortedMultiset multiset) {
            super(multiset);
        }

        @Override
        public E lower(E e) {
            return getElementOrNull(multiset().headMultiset(e, OPEN).lastEntry());
        }

        @Override
        public E floor(E e) {
            return getElementOrNull(multiset().headMultiset(e, CLOSED).lastEntry());
        }

        @Override
        public E ceiling(E e) {
            return getElementOrNull(multiset().tailMultiset(e, CLOSED).firstEntry());
        }

        @Override
        public E higher(E e) {
            return getElementOrNull(multiset().tailMultiset(e, OPEN).firstEntry());
        }

        @Override
        public NavigableSet descendingSet() {
            return new NavigableElementSet(multiset().descendingMultiset());
        }

        @Override
        public Iterator descendingIterator() {
            return descendingSet().iterator();
        }

        @Override
        public E pollFirst() {
            return getElementOrNull(multiset().pollFirstEntry());
        }

        @Override
        public E pollLast() {
            return getElementOrNull(multiset().pollLastEntry());
        }

        @Override
        public NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
            return new NavigableElementSet(multiset().subMultiset(fromElement, BoundType.forBoolean(fromInclusive), toElement, BoundType.forBoolean(toInclusive)));
        }

        @Override
        public NavigableSet headSet(E toElement, boolean inclusive) {
            return new NavigableElementSet(multiset().headMultiset(toElement, BoundType.forBoolean(inclusive)));
        }

        @Override
        public NavigableSet tailSet(E fromElement, boolean inclusive) {
            return new NavigableElementSet(multiset().tailMultiset(fromElement, BoundType.forBoolean(inclusive)));
        }
    }

    private static  E getElementOrThrow(Entry entry) {
        if (entry == null) {
            throw new NoSuchElementException();
        }
        return entry.getElement();
    }

    private static  E getElementOrNull(@Nullable Entry entry) {
        return (entry == null) ? null : entry.getElement();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy