zoukankan      html  css  js  c++  java
  • Exercises for Nested Classes

    The answer is below

      1 public class DataStructure {
      2 
      3   private final static int SIZE = 15;
      4   private int[] arrayOfInt = new int[SIZE];
      5 
      6   DataStructure(){
      7     for (int i = 0; i < SIZE; i++)
      8       arrayOfInt[i] = i;
      9   }
     10 
     11   public int getSize(){
     12     return SIZE;
     13   }
     14 
     15   public int getInt(int index){
     16     return arrayOfInt[index];
     17   }
     18 
     19   // interface is default static
     20   interface DataStructureIterator extends Iterator<Integer>{}
     21 
     22   // non-static nested class(inner class), like an instance method
     23   private class EvenIterator implements DataStructureIterator{
     24 
     25     private int nextIndex = 0;
     26 
     27     @Override
     28     public boolean hasNext() {
     29       return nextIndex < SIZE;
     30     }
     31 
     32     @Override
     33     public Integer next() {
     34       Integer value = Integer.valueOf(arrayOfInt[nextIndex]);
     35       nextIndex += 2;
     36       return value;
     37     }
     38   }
     39 
     40   public DataStructureIterator getEventIterator(){
     41     return new EvenIterator();
     42   }
     43 
     44   public void printEven(){
     45     DataStructureIterator iterator = new EvenIterator();
     46     while (iterator.hasNext())
     47       System.out.print(iterator.next() + " ");
     48     System.out.println();
     49   }
     50 
     51   // more generic print method, through an interface type parameter
     52   public void print(DataStructureIterator iterator){
     53     while (iterator.hasNext())
     54       System.out.print(iterator.next() + " ");
     55     System.out.println();
     56   }
     57 
     58   // pass a functional interface type parameter, for lambda expression invoking
     59   public void print(Function<Integer, Boolean> function){
     60     for (int i = 0; i < SIZE; i++){
     61       if (function.apply(i)) // like a filter
     62         System.out.print(arrayOfInt[i] + " ");
     63     }
     64     System.out.println();
     65   }
     66 
     67   // as a method reference, for substitution of lambda expression
     68   public static Boolean isEvenIndex(Integer index){
     69     if (index % 2 == 0) return Boolean.TRUE;
     70     return Boolean.FALSE;
     71   }
     72 
     73   public static Boolean isOddIndex(Integer index){
     74     if (index % 2 == 0) return Boolean.FALSE;
     75     return Boolean.TRUE;
     76   }
     77 
     78   public static void main(String[] args) {
     79 
     80     DataStructure ds = new DataStructure();
     81 
     82     System.out.println("printEven()");
     83     ds.printEven();
     84 
     85     System.out.println("print(DataStructureIterator) with getEvenIterator()");
     86     ds.print(ds.getEventIterator());
     87 
     88     System.out.println("print(DataStructureIterator) with an instance of EventIterator");
     89     ds.print(ds.new EvenIterator());
     90 
     91     System.out.println("print(DataStructureIterator) with anonymous class, odd index");
     92     ds.print(new DataStructureIterator() {
     93       private int nextIndex = 1;
     94       public boolean hasNext() {
     95         return nextIndex < ds.getSize();
     96       }
     97       public Integer next() {
     98         Integer value = Integer.valueOf(ds.getInt(nextIndex));
     99         nextIndex += 2;
    100         return value;
    101       }
    102     });
    103 
    104     System.out.println("print(Function) with lambda expression, even index");
    105     ds.print(index -> index % 2 == 0 ? true : false);
    106     ds.print(index -> index % 2 == 0 ? false : true );
    107 
    108     System.out.println("print(Function) with method references");
    109     ds.print(DataStructure::isEvenIndex);
    110     ds.print(DataStructure::isOddIndex);
    111   }
    112 }

    reference from: https://docs.oracle.com/javase/tutorial/java/javaOO/QandE/nested-questions.html

  • 相关阅读:
    前端上传组件Plupload使用指南
    移动前端开发之viewport的深入理解
    性能更好的js动画实现方式——requestAnimationFrame
    如何判断一个js对象是否一个DOM对象
    用Phaser来制作一个html5游戏——flappy bird (二)
    用Phaser来制作一个html5游戏——flappy bird (一)
    css选择器中:first-child与:first-of-type的区别
    用node-webkit把web应用打包成桌面应用
    为Titanium创建自己的安卓推送模块
    Titanium中调用ios组件时语言不是本地化的解决方法
  • 原文地址:https://www.cnblogs.com/yangwu-183/p/13489970.html
Copyright © 2011-2022 走看看