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<String> reversed(){
		return new Iterator<String>() {

			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<String> randomized(){
		return new Iterator<String>() {
			public Iterator<String> iterator() {
				List<String> 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<String> reversed(){
		return new Iterable<String>() {
			@Override
			public Iterator<String> iterator() {
				// TODO Auto-generated method stub
				return new Iterator<String>() {
					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<String> randomized(){
		return new Iterable<String>() {
			public Iterator<String> iterator() {
				List<String> 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分辨不清,导致实现失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值