UncheckedIOSpliterator.java

  1. /*
  2.  * Licensed to the Apache Software Foundation (ASF) under one or more
  3.  * contributor license agreements.  See the NOTICE file distributed with
  4.  * this work for additional information regarding copyright ownership.
  5.  * The ASF licenses this file to You under the Apache License, Version 2.0
  6.  * (the "License"); you may not use this file except in compliance with
  7.  * the License.  You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */

  17. package org.apache.commons.io.function;

  18. import java.io.IOException;
  19. import java.io.UncheckedIOException;
  20. import java.util.Comparator;
  21. import java.util.Objects;
  22. import java.util.Spliterator;
  23. import java.util.function.Consumer;

  24. /**
  25.  * A {@link Spliterator} for an {@link IOSpliterator} that throws {@link UncheckedIOException} instead of
  26.  * {@link IOException}.
  27.  * <p>
  28.  * Keep package-private for now.
  29.  * </p>
  30.  *
  31.  * @param <T> the type of elements returned by this iterator.
  32.  */
  33. final class UncheckedIOSpliterator<T> implements Spliterator<T> {

  34.     private final IOSpliterator<T> delegate;

  35.     UncheckedIOSpliterator(final IOSpliterator<T> delegate) {
  36.         this.delegate = Objects.requireNonNull(delegate, "delegate");
  37.     }

  38.     @Override
  39.     public int characteristics() {
  40.         return delegate.characteristics();
  41.     }

  42.     @Override
  43.     public long estimateSize() {
  44.         return delegate.estimateSize();
  45.     }

  46.     @Override
  47.     public void forEachRemaining(final Consumer<? super T> action) {
  48.         Uncheck.accept(delegate::forEachRemaining, action::accept);
  49.     }

  50.     @Override
  51.     public Comparator<? super T> getComparator() {
  52.         return delegate.getComparator().asComparator();
  53.     }

  54.     @Override
  55.     public long getExactSizeIfKnown() {
  56.         return delegate.getExactSizeIfKnown();
  57.     }

  58.     @Override
  59.     public boolean hasCharacteristics(final int characteristics) {
  60.         return delegate.hasCharacteristics(characteristics);
  61.     }

  62.     @Override
  63.     public boolean tryAdvance(final Consumer<? super T> action) {
  64.         return Uncheck.apply(delegate::tryAdvance, action::accept);
  65.     }

  66.     @Override
  67.     public Spliterator<T> trySplit() {
  68.         return Uncheck.get(delegate::trySplit).unwrap();
  69.     }

  70. }