Thinking in Java 11.13.1适配器方法惯用法

过程:

-类MultiIterableClass继承类IterableClass
reversed方法
randomized方法(运用到Collections.shuffle)
main:三种方法输出

个人实现:

package thinking;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import thinkingjava.IterableClass;

public class MultiIterableClass extends IterableClass {

	public Iterator reversed(){
		return new Iterator() {

			private int index = words.length-1;
			@Override
			public boolean hasNext() {
				// TODO Auto-generated method stub
				return index<0;
			}
			
			@Override
			public String next() {
				// TODO Auto-generated method stub
				return words[index--];
			}
			
			public void remove(){
				throw new UnsupportedOperationException();
			}
		};
	}
	//未写出
	public Iterator randomized(){
		return new Iterator() {
			public Iterator iterator() {
				List shuffled = new ArrayList<>(Arrays.asList(words));
				Collections.shuffle(shuffled, new Random(47));
				return shuffled.iterator();
			}

			@Override
			public boolean hasNext() {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public String next() {
				// TODO Auto-generated method stub
				return null;
			}
			
		};
	}
	//未写出,报错
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*for(String s  : new MultiIterableClass().reversed()){
			System.out.print(s+" ");
		}*/
		
		MultiIterableClass multiIterableClass = new MultiIterableClass();
		for(String s  : multiIterableClass.iterator()){
			System.out.print(s+" ");
		}
		for(String s  : new MultiIterableClass().randomized()){
			System.out.print(s+" ");
		}

	}

}

原书实现:

package thinkingjava;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

public class MultiIterableClass extends IterableClass {

	public Iterable reversed(){
		return new Iterable() {
			@Override
			public Iterator iterator() {
				// TODO Auto-generated method stub
				return new Iterator() {
					private int index = words.length-1;
					public boolean hasNext() {
						// TODO Auto-generated method stub
						return index>-1;
					}
					
					public String next() {
						// TODO Auto-generated method stub
						return words[index--];
					}
					
					public void remove(){
						throw new UnsupportedOperationException();
					}
				};
			}
		};
	}
	public Iterable randomized(){
		return new Iterable() {
			public Iterator iterator() {
				List shuffled = new ArrayList<>(Arrays.asList(words));
				Collections.shuffle(shuffled, new Random(47));
				return shuffled.iterator();
			}
			
		};
	}
	
	public static void main(String[] args) {
		
		MultiIterableClass multiIterableClass = new MultiIterableClass();
		for(String s  : multiIterableClass.reversed()){
			System.out.print(s+" ");
		}
		System.out.println();
		for(String s  : multiIterableClass.randomized()){
			System.out.print(s+" ");
		}
		System.out.println();
		for(String s  : multiIterableClass){
			System.out.print(s+" ");
		}

	}

}

比较:
对Iterable与Iterator分辨不清,导致实现失败

你可能感兴趣的:(Java)