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

org.glassfish.jersey.internal.util.collection.Views Maven / Gradle / Ivy

Go to download

A bundle project producing JAX-RS RI bundles. The primary artifact is an "all-in-one" OSGi-fied JAX-RS RI bundle (jaxrs-ri.jar). Attached to that are two compressed JAX-RS RI archives. The first archive (jaxrs-ri.zip) consists of binary RI bits and contains the API jar (under "api" directory), RI libraries (under "lib" directory) as well as all external RI dependencies (under "ext" directory). The secondary archive (jaxrs-ri-src.zip) contains buildable JAX-RS RI source bundle and contains the API jar (under "api" directory), RI sources (under "src" directory) as well as all external RI dependencies (under "ext" directory). The second archive also contains "build.xml" ANT script that builds the RI sources. To build the JAX-RS RI simply unzip the archive, cd to the created jaxrs-ri directory and invoke "ant" from the command line.

There is a newer version: 3.1.9
Show newest version
/*
 * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package org.glassfish.jersey.internal.util.collection;

import java.util.AbstractMap;
import java.util.AbstractSequentialList;
import java.util.AbstractSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import static org.glassfish.jersey.internal.guava.Preconditions.checkNotNull;

/**
 * Collections utils, which provide transforming views for {@link List} and {@link Map}.
 *
 * @author Pavel Bucek
 */
public class Views {

    private Views() {
        // prevent instantiation.
    }

    /**
     * Create a {@link List} view, which transforms the values of provided original list.
     * 

* Removing elements from the view is supported, adding and setting isn't and * throws {@link UnsupportedOperationException} when invoked. * * @param originalList original list. * @param transformer transforming functions. * @param transformed type parameter. * @param type of the element from provided list. * @return transformed list view. */ public static List listView(List originalList, Function transformer) { return new AbstractSequentialList() { @Override public ListIterator listIterator(int index) { return new ListIterator() { final ListIterator iterator = originalList.listIterator(index); @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { return transformer.apply(iterator.next()); } @Override public boolean hasPrevious() { return iterator.hasPrevious(); } @Override public T previous() { return transformer.apply(iterator.previous()); } @Override public int nextIndex() { return iterator.nextIndex(); } @Override public int previousIndex() { return iterator.previousIndex(); } @Override public void remove() { iterator.remove(); } @Override public void set(T t) { throw new UnsupportedOperationException("Not supported."); } @Override public void add(T t) { throw new UnsupportedOperationException("Not supported."); } }; } @Override public int size() { return originalList.size(); } }; } /** * Create a {@link Map} view, which transforms the values of provided original map. *

* Removing elements from the map view is supported, adding and setting isn't and * throws {@link UnsupportedOperationException} when invoked. * * @param originalMap provided map. * @param valuesTransformer values transformer. * @param key type. * @param transformed value type. * @param original value type. * @return transformed map view. */ public static Map mapView(Map originalMap, Function valuesTransformer) { return new AbstractMap() { @Override public Set> entrySet() { return new AbstractSet>() { Set> originalSet = originalMap.entrySet(); Iterator> original = originalSet.iterator(); @Override public Iterator> iterator() { return new Iterator>() { @Override public boolean hasNext() { return original.hasNext(); } @Override public Entry next() { Entry next = original.next(); return new Entry() { @Override public K getKey() { return next.getKey(); } @Override public V getValue() { return valuesTransformer.apply(next.getValue()); } @Override public V setValue(V value) { throw new UnsupportedOperationException("Not supported."); } }; } @Override public void remove() { original.remove(); } }; } @Override public int size() { return originalSet.size(); } }; } }; } /** * Create a view of an union of provided sets. *

* View is updated whenever any of the provided set changes. * * @param set1 first set. * @param set2 second set. * @param set item type. * @return union view of given sets. */ public static Set setUnionView(final Set set1, final Set set2) { checkNotNull(set1, "set1"); checkNotNull(set2, "set2"); return new AbstractSet() { @Override public Iterator iterator() { return getUnion(set1, set2).iterator(); } @Override public int size() { return getUnion(set1, set2).size(); } private Set getUnion(Set set1, Set set2) { HashSet hashSet = new HashSet<>(set1); hashSet.addAll(set2); return hashSet; } }; } /** * Create a view of a difference of provided sets. *

* View is updated whenever any of the provided set changes. * * @param set1 first set. * @param set2 second set. * @param set item type. * @return union view of given sets. */ public static Set setDiffView(final Set set1, final Set set2) { checkNotNull(set1, "set1"); checkNotNull(set2, "set2"); return new AbstractSet() { @Override public Iterator iterator() { return getDiff(set1, set2).iterator(); } @Override public int size() { return getDiff(set1, set2).size(); } private Set getDiff(Set set1, Set set2) { HashSet hashSet = new HashSet<>(); hashSet.addAll(set1); hashSet.addAll(set2); return hashSet.stream().filter(new Predicate() { @Override public boolean test(E e) { return set1.contains(e) && !set2.contains(e); } }).collect(Collectors.toSet()); } }; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy