View Javadoc

1   /*
2    * Licensed under the Apache License, Version 2.0 (the "License");
3    * you may not use this file except in compliance with the License.
4    * You may obtain a copy of the License at
5    *
6    *      http://www.apache.org/licenses/LICENSE-2.0
7    *
8    * Unless required by applicable law or agreed to in writing, software
9    * distributed under the License is distributed on an "AS IS" BASIS,
10   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11   * See the License for the specific language governing permissions and
12   * limitations under the License.
13   */
14  
15  package org.apache.commons.functor.generator.util;
16  
17  import java.util.Arrays;
18  import java.util.Collection;
19  import java.util.Iterator;
20  import java.util.Map;
21  
22  import org.apache.commons.functor.generator.Generator;
23  import org.apache.commons.functor.generator.IteratorToGeneratorAdapter;
24  
25  /**
26   * Generator factory for each element of a "collection".
27   *
28   * @since 1.0
29   * @version $Revision: 1160769 $ $Date: 2011-08-23 18:11:06 +0200 (Tue, 23 Aug 2011) $
30   * @author  Jason Horman (jason@jhorman.org)
31   */
32  public final class EachElement {
33      /**
34       * <p>{@code EachElement} instances should NOT be constructed in
35       * standard programming. Instead, the methods of the class should be invoked
36       * statically.</p>
37       *
38       * <p>This constructor is public to permit tools that require a JavaBean
39       * instance to operate.</p>
40       */
41      public EachElement() {
42      }
43  
44      /**
45       * Get a Generator for each element of a Collection.
46       * @param <E> the type of elements held in the input collection.
47       * @param collection to iterate
48       * @return Generator<E>
49       */
50      public static <E> Generator<E> from(Collection<? extends E> collection) {
51          return collection == null ? null : EachElement.from(collection.iterator());
52      }
53  
54      /**
55       * Get a Generator for each entry of a Map.
56       * @param <K> the type of keys maintained by the input map.
57       * @param <V> the type of mapped values in the input map.
58       * @param map to iterate
59       * @return Generator
60       */
61      @SuppressWarnings("unchecked")
62      public static <K, V> Generator<Map.Entry<K, V>> from(Map<? extends K, ? extends V> map) {
63          return map == null ? null : EachElement.from(((Map<K, V>) map).entrySet().iterator());
64      }
65  
66      /**
67       * Get a Generator for each element of an Object[].
68       * @param <E> the type of elements held in the input array.
69       * @param array to iterate
70       * @return Generator
71       */
72      public static <E> Generator<E> from(E[] array) {
73          return array == null ? null : EachElement.from(Arrays.asList(array).iterator());
74      }
75  
76      /**
77       * Get a Generator for each element of an Iterator.
78       * @param <E> the type of elements held in the input iterator.
79       * @param iter to iterate
80       * @return Generator
81       */
82      public static <E> Generator<E> from(Iterator<? extends E> iter) {
83          return iter == null ? null : new IteratorToGeneratorAdapter<E>(iter);
84      }
85  }