src/share/classes/java/util/Collections.java

Print this page
rev 7893 : 8023275: Wrapping collections should override default methods
Reviewed-by:

*** 25,42 **** package java.util; import java.io.Serializable; import java.io.ObjectOutputStream; import java.io.IOException; - import java.io.InvalidObjectException; import java.lang.reflect.Array; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.UnaryOperator; import java.util.stream.Stream; import java.util.stream.StreamSupport; /** * This class consists exclusively of static methods that operate on or return --- 25,42 ---- package java.util; import java.io.Serializable; import java.io.ObjectOutputStream; import java.io.IOException; import java.lang.reflect.Array; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.UnaryOperator; + import java.util.stream.IntStream; import java.util.stream.Stream; import java.util.stream.StreamSupport; /** * This class consists exclusively of static methods that operate on or return
*** 1146,1156 **** @SuppressWarnings("unchecked") @Override public Spliterator<E> spliterator() { return (Spliterator<E>)c.spliterator(); } ! } /** * Returns an unmodifiable view of the specified set. This method allows * modules to provide users with "read-only" access to internal sets. --- 1146,1163 ---- @SuppressWarnings("unchecked") @Override public Spliterator<E> spliterator() { return (Spliterator<E>)c.spliterator(); } ! @Override ! public Stream<E> stream() { ! return (Stream<E>)c.stream(); ! } ! @Override ! public Stream<E> parallelStream() { ! return (Stream<E>)c.parallelStream(); ! } } /** * Returns an unmodifiable view of the specified set. This method allows * modules to provide users with "read-only" access to internal sets.
*** 2007,2018 **** * collection. In order to guarantee serial access, it is critical that * <strong>all</strong> access to the backing collection is accomplished * through the returned collection.<p> * * It is imperative that the user manually synchronize on the returned ! * collection when traversing it via {@link Iterator} or ! * {@link Spliterator}: * <pre> * Collection c = Collections.synchronizedCollection(myCollection); * ... * synchronized (c) { * Iterator i = c.iterator(); // Must be in the synchronized block --- 2014,2025 ---- * collection. In order to guarantee serial access, it is critical that * <strong>all</strong> access to the backing collection is accomplished * through the returned collection.<p> * * It is imperative that the user manually synchronize on the returned ! * collection when traversing it via {@link Iterator}, {@link Spliterator} ! * or {@link Stream}: * <pre> * Collection c = Collections.synchronizedCollection(myCollection); * ... * synchronized (c) { * Iterator i = c.iterator(); // Must be in the synchronized block
*** 2118,2127 **** --- 2125,2142 ---- } @Override public Spliterator<E> spliterator() { return c.spliterator(); // Must be manually synched by user! } + @Override + public Stream<E> stream() { + return c.stream(); // Must be manually synched by user! + } + @Override + public Stream<E> parallelStream() { + return c.parallelStream(); // Must be manually synched by user! + } private void writeObject(ObjectOutputStream s) throws IOException { synchronized (mutex) {s.defaultWriteObject();} } }
*** 3170,3179 **** --- 3185,3198 ---- public boolean removeIf(Predicate<? super E> filter) { return c.removeIf(filter); } @Override public Spliterator<E> spliterator() {return c.spliterator();} + @Override + public Stream<E> stream() {return c.stream();} + @Override + public Stream<E> parallelStream() {return c.parallelStream();} } /** * Returns a dynamically typesafe view of the specified queue. * Any attempt to insert an element of the wrong type will result in
*** 5095,5104 **** --- 5114,5139 ---- if (fromIndex > toIndex) throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); return new CopiesList<>(toIndex - fromIndex, element); } + + // Override default methods in Collection + @Override + public Stream<E> stream() { + return IntStream.range(0, n).mapToObj(i -> element); + } + + @Override + public Stream<E> parallelStream() { + return IntStream.range(0, n).parallel().mapToObj(i -> element); + } + + @Override + public Spliterator<E> spliterator() { + return stream().spliterator(); + } } /** * Returns a comparator that imposes the reverse of the <em>natural * ordering</em> on a collection of objects that implement the
*** 5502,5511 **** --- 5537,5550 ---- return s.removeIf(filter); } @Override public Spliterator<E> spliterator() {return s.spliterator();} + @Override + public Stream<E> stream() {return s.stream();} + @Override + public Stream<E> parallelStream() {return s.parallelStream();} private static final long serialVersionUID = 2454657854757543876L; private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException
*** 5567,5578 **** // Override default methods in Collection @Override public void forEach(Consumer<? super E> action) {q.forEach(action);} @Override - public Spliterator<E> spliterator() {return q.spliterator();} - @Override public boolean removeIf(Predicate<? super E> filter) { return q.removeIf(filter); } } } --- 5606,5621 ---- // Override default methods in Collection @Override public void forEach(Consumer<? super E> action) {q.forEach(action);} @Override public boolean removeIf(Predicate<? super E> filter) { return q.removeIf(filter); } + @Override + public Spliterator<E> spliterator() {return q.spliterator();} + @Override + public Stream<E> stream() {return q.stream();} + @Override + public Stream<E> parallelStream() {return q.parallelStream();} } }