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

com.hazelcast.util.CollectionUtil Maven / Gradle / Ivy

There is a newer version: 5.0-BETA-1
Show newest version
/*
 * Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
 *
 * 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.hazelcast.util;

import com.hazelcast.nio.serialization.Data;
import com.hazelcast.spi.serialization.SerializationService;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import static com.hazelcast.util.Preconditions.checkNotNull;

/**
 * Various collection utility methods.
 */
public final class CollectionUtil {

    private CollectionUtil() {
    }

    /**
     * Returns {@code true} if the given collection is {@code null} or empty, otherwise returns {@code false}.
     *
     * @param collection the given collection
     * @return {@code true} if collection is empty
     */
    public static boolean isEmpty(Collection collection) {
        return collection == null || collection.isEmpty();
    }

    /**
     * Returns {@code true} if the given collection is not {@code null} and not empty, otherwise returns {@code false}.
     *
     * @param collection the given collection
     * @return {@code true} if collection is not empty
     */
    public static boolean isNotEmpty(Collection collection) {
        return !isEmpty(collection);
    }

    /**
     * Adds a value to a list of values in the map.
     *
     * Creates a new list if no list is found for the key.
     *
     * @param map   the given map of lists
     * @param key   the key of the target list
     * @param value the value to add to the target list
     * @return the updated list of values
     */
    public static  List addToValueList(Map> map, K key, V value) {
        List valueList = map.get(key);
        if (valueList == null) {
            valueList = new ArrayList();
            map.put(key, valueList);
        }
        valueList.add(value);

        return valueList;
    }

    /**
     * Returns the n-th item or {@code null} if collection is smaller.
     *
     * @param collection the given collection
     * @param position   position of the wanted item
     * @return the item on position or {@code null} if the given collection is too small
     * @throws NullPointerException if collection is {@code null}
     */
    public static  T getItemAtPositionOrNull(Collection collection, int position) {
        if (position >= collection.size()) {
            return null;
        }
        if (collection instanceof List) {
            return ((List) collection).get(position);
        }
        Iterator iterator = collection.iterator();
        T item = null;
        for (int i = 0; i < position + 1; i++) {
            item = iterator.next();
        }
        return item;
    }

    /**
     * Converts a collection of any type to a collection of {@link Data}.
     *
     * @param collection           the given collection
     * @param serializationService will be used for converting object to {@link Data}
     * @return collection of data
     * @throws NullPointerException if collection is {@code null} or contains a {@code null} item
     */
    public static  Collection objectToDataCollection(Collection collection,
                                                              SerializationService serializationService) {
        List dataKeys = new ArrayList(collection.size());
        for (C item : collection) {
            checkNotNull(item);
            dataKeys.add(serializationService.toData(item));
        }
        return dataKeys;
    }

    /**
     * Converts a {@link Collection} to a primitive {@code int[]} array.
     *
     * @param collection the given collection
     * @return a primitive int[] array
     * @throws NullPointerException if collection is {@code null}
     */
    public static int[] toIntArray(Collection collection) {
        int[] collectionArray = new int[collection.size()];
        int index = 0;
        for (Integer item : collection) {
            collectionArray[index++] = item;
        }
        return collectionArray;
    }

    /**
     * Converts a {@link Collection} to a primitive {@code long[]} array.
     *
     * @param collection the given collection
     * @return a primitive long[] array
     * @throws NullPointerException if collection is {@code null}
     */
    public static long[] toLongArray(Collection collection) {
        long[] collectionArray = new long[collection.size()];
        int index = 0;
        for (Long item : collection) {
            collectionArray[index++] = item;
        }
        return collectionArray;
    }

    /**
     * Converts an int array to an Integer {@link List}.
     *
     * The returned collection can be modified after it is created; it isn't protected by an immutable wrapper.
     *
     * @param array the array
     * @return the list.
     * throws {@link NullPointerException} if array is null.
     */
    public static List toIntegerList(int[] array) {
        List result = new ArrayList(array.length);
        for (int partitionId : array) {
            result.add(partitionId);
        }
        return result;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy