View Javadoc

    1   /*
    2    * Copyright 2012 The Netty Project
    3    *
    4    * The Netty Project licenses this file to you under the Apache License,
    5    * version 2.0 (the "License"); you may not use this file except in compliance
    6    * with the License. You may obtain a copy of the License at:
    7    *
    8    *   http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    13   * License for the specific language governing permissions and limitations
    14   * under the License.
    15   */
    16  package org.jboss.netty.channel.group;
    17
    18  import java.util.Iterator;
    19  import java.util.NoSuchElementException;
    20
    21  /**
    22   */
    23  final class CombinedIterator<E> implements Iterator<E> {
    24
    25      private final Iterator<E> i1;
    26      private final Iterator<E> i2;
    27      private Iterator<E> currentIterator;
    28
    29      CombinedIterator(Iterator<E> i1, Iterator<E> i2) {
    30          if (i1 == null) {
    31              throw new NullPointerException("i1");
    32          }
    33          if (i2 == null) {
    34              throw new NullPointerException("i2");
    35          }
    36          this.i1 = i1;
    37          this.i2 = i2;
    38          currentIterator = i1;
    39      }
    40
    41      public boolean hasNext() {
    42          boolean hasNext = currentIterator.hasNext();
    43          if (hasNext) {
    44              return true;
    45          }
    46
    47          if (currentIterator == i1) {
    48              currentIterator = i2;
    49              return hasNext();
    50          } else {
    51              return false;
    52          }
    53      }
    54
    55      public E next() {
    56          try {
    57              E e = currentIterator.next();
    58              return e;
    59          } catch (NoSuchElementException e) {
    60              if (currentIterator == i1) {
    61                  currentIterator = i2;
    62                  return next();
    63              } else {
    64                  throw e;
    65              }
    66          }
    67      }
    68
    69      public void remove() {
    70          currentIterator.remove();
    71      }
    72
    73  }