/** * * Copyright 2015-2021 Florian Schmaus * * 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 org.jivesoftware.smack.util; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class CollectionUtil { public static Collection requireNotEmpty(Collection collection, String collectionName) { if (collection == null) { throw new NullPointerException(collectionName + " must not be null."); } if (collection.isEmpty()) { throw new IllegalArgumentException(collectionName + " must not be empty."); } return collection; } public static > List removeUntil(C collection, Predicate predicate) { List removedElements = new ArrayList<>(collection.size()); for (Iterator it = collection.iterator(); it.hasNext();) { T t = it.next(); if (predicate.test(t)) { break; } removedElements.add(t); it.remove(); } return removedElements; } public interface Predicate { boolean test(T t); } public static ArrayList newListWith(Collection collection) { if (collection == null) { return null; } return new ArrayList<>(collection); } public static List cloneAndSeal(Collection collection) { if (collection == null) { return Collections.emptyList(); } ArrayList clone = newListWith(collection); return Collections.unmodifiableList(clone); } public static Map cloneAndSeal(Map map) { Map clone = new HashMap<>(map); return Collections.unmodifiableMap(clone); } public static Set newSetWith(Collection collection) { if (collection == null) { return null; } return new HashSet<>(collection); } public static List emptyOrSingletonListFrom(T element) { if (element == null) { return Collections.emptyList(); } return Collections.singletonList(element); } public static Set nullSafeUnmodifiableSet(Set set) { if (set == null) { return Collections.emptySet(); } return Collections.unmodifiableSet(set); } }