/* * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Oracle or the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ public class DataStructure { private final static int SIZE = 15; private int[] arrayOfInts = new int[SIZE]; public DataStructure() { for (int i = 0; i < SIZE; i++) { arrayOfInts[i] = i; } } public int size() { return SIZE; } public int get(int index) { return arrayOfInts[index]; } interface DataStructureIterator extends java.util.Iterator { } private class EvenIterator implements DataStructureIterator { private int nextIndex = 0; public boolean hasNext() { return (nextIndex <= SIZE - 1); } public Integer next() { Integer retValue = Integer.valueOf(arrayOfInts[nextIndex]); nextIndex += 2; return retValue; } } public DataStructureIterator getEvenIterator() { return new EvenIterator(); } public void printEven() { DataStructureIterator iterator = getEvenIterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } System.out.println(); } public void print(DataStructureIterator iterator) { while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } System.out.println(); } public void print(java.util.function.Function function) { for (int i = 0; i < SIZE; i++) { if (function.apply(i)) { System.out.print(arrayOfInts[i] + " "); } } System.out.println(); } public static Boolean isEvenIndex(Integer index) { if (index % 2 == 0) return Boolean.TRUE; return Boolean.FALSE; } public static Boolean isOddIndex(Integer index) { if (index % 2 == 0) return Boolean.FALSE; return Boolean.TRUE; } public static void main(String s[]) { DataStructure ds = new DataStructure(); System.out.println("printEven()"); ds.printEven(); System.out.println("print(DataStructureIterator) with " + "getEvenIterator"); ds.print(ds.getEvenIterator()); System.out.println("print(DataStructureIterator) with " + "anonymous class, odd indicies"); ds.print( new DataStructure.DataStructureIterator() { private int nextIndex = 1; public boolean hasNext() { return (nextIndex <= ds.size() - 1); } public Integer next() { int retValue = ds.get(nextIndex); nextIndex += 2; return retValue; } } ); System.out.println("print(Function) with lambda expressions"); ds.print(index -> { if (index % 2 == 0) return Boolean.TRUE; return Boolean.FALSE; }); ds.print(index -> { if (index % 2 == 0) return Boolean.FALSE; return Boolean.TRUE; }); System.out.println("print(Function) with method references"); ds.print(DataStructure::isEvenIndex); ds.print(DataStructure::isOddIndex); } }