/* * Copyright 2013 Samppa Saarela * * 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.javersion.util; import java.util.Collection; import java.util.Set; import java.util.Spliterator; import java.util.stream.Stream; import java.util.stream.StreamSupport; import javax.annotation.concurrent.Immutable; // TODO: More methods... @Immutable public interface PersistentSet<E> extends Iterable<E> { Set<E> asSet(); PersistentSet<E> conj(E element); PersistentSet<E> conjAll(Collection<? extends E> elements); boolean contains(Object o); PersistentSet<E> disj(Object element); MutableSet<E> toMutableSet(); int size(); Spliterator<E> spliterator(); default Stream<E> stream() { return StreamSupport.stream(spliterator(), false); } default Stream<E> parallelStream() { return StreamSupport.stream(spliterator(), true); } }