过程:

-类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;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn index<0;}@Overridepublic String next() {// TODO Auto-generated method stubreturn 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();}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn false;}@Overridepublic String next() {// TODO Auto-generated method stubreturn 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>() {@Overridepublic Iterator<String> iterator() {// TODO Auto-generated method stubreturn new Iterator<String>() {private int index = words.length-1;public boolean hasNext() {// TODO Auto-generated method stubreturn index>-1;}public String next() {// TODO Auto-generated method stubreturn 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分辨不清,导致实现失败

Thinking in Java 11.13.1适配器方法惯用法相关推荐

  1. Android Gradle plugin requires Java 11 to run 解决方法

    当Java版本不正确时,Gradle的sync阶段回报错如下: An exception occurred applying plugin request [id: 'com.android.appl ...

  2. java class equals_Java中equals方法的用法

    一.Object类中的equals方法 所有类都从Object类中继承了equals方法. Object类中equals方法源代码如下: public boolean equals (Object o ...

  3. Java 11:String类中的新方法

    Java 11:String类中的新方法 Java 11没有很多特定于语言的功能.因此,令人惊讶的是,在Java String Class中引入了6种新方法. Java 11 String类新方法 让 ...

  4. Java 11:字符串类中的新方法

    Java 11 doesn't have a lot of language specific features. So, it was surprising to see 6 new methods ...

  5. 在Ubuntu 18.04系统上安装Java 11的方法

    本文将介绍在Ubuntu 18.04/Ubuntu 16.04/Debian 9系统上安装Java 11的方法,可以通过openjdk-11.0.1_linux-x64_bin.tar.gz.jdk- ...

  6. 转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议11~15)...

    阅读目录 建议11:养成良好习惯,显示声明UID 建议12:避免用序列化类在构造函数中为不变量赋值 建议13:避免为final变量复杂赋值 建议14:使用序列化类的私有方法巧妙解决部分属性持久化问题 ...

  7. Java 11新字符串方法的基准

    在检查Java 11的新增功能时,我发现String类有几种新方法. 所以我想用旧的做事方法和使用新方法做一个微基准测试. 这些新方法是: boolean isBlank()String strip( ...

  8. Apache Ant 1.9.13和1.10.5发布–支持Java 11单文件源程序

    我们刚刚发布了Apache Ant的1.9.13和1.10.5版本 . 与往常一样,您可以从Ant项目下载页面下载它. 这两个版本主要是错误修复版本. 但是,1.10.5版对" java&q ...

  9. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法

    文章目录 前言 一.JDK 11(Java 11)之后 JRE 说明 二.选择自己需要的 JDK 版本 三.对下载的 JDK 进行解压 四.执行 Dos 命令生成 JRE 总结 前言 我们之前的 JD ...

  10. ubuntu18安装oracle11g,在Ubuntu 18.04系统下快速安装Oracle Java 11的方法

    本文介绍在Ubuntu 18.04操作系统下使用PPA快速安装Oracle Java 11的方法,同时也可以用在Ubuntu 18.10.Ubuntu 16.04.Ubuntu 14.04版本中. O ...

最新文章

  1. pytorch numpy 数据类型转换
  2. 【网摘】检测 iframe 是否加载完成
  3. 特斯拉「断网」致500名车主被锁车外,最长5小时,网友:有些东西就不该经过网络...
  4. 印度视觉设计师Rishab平面设计作品,简直太美了!
  5. Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
  6. liunx下搭建mysql主从_linux下搭建mysql主从
  7. 大年30还多少天_大美鹅老李告诉你30天的鹅需要多少温度?
  8. 设计素材|手机UI界面模板psd源文件格式!
  9. 相机获取的照片向左自动旋转90度解决方法
  10. 【TSP】基于matlab GUI遗传算法求解旅行商问题【含Matlab源码 1333期】
  11. oracle根据中文获取拼音全拼函数
  12. 通达信炒股软件测试简历,专家看盘(通达信公式 副图 源码 测试图)
  13. 你和财务自由之间,只差一个公式
  14. 诺基亚培育低端机市场 迂回战术威胁中华酷联
  15. 学计算机如何护眼,长期看电脑如何保护眼睛 吃这些有效保护视力
  16. 详解Nginx Rewrite标记last和break的区别
  17. xml大于等于转移_Mybatis.xml文件中大于小于等于
  18. QEMU中TCG翻译流程
  19. 黑产反诈有方法,异常识别我在行—欺诈反洗钱等领域用得最多的经典算法
  20. Re: Object Oriented

热门文章

  1. NMEA0183标准语句
  2. PostgreSQL使用函数实现merge功能
  3. 尝试造了个工具类库,名为 Diana
  4. springboot 静态资源访问
  5. Maven 项目添加jetty 插件
  6. Android软件测试的日志文件问题
  7. thinkphp-where-字符串条件
  8. 泛型思想理解数据结构链表
  9. iOS--资料--类目Category收集
  10. Unknown collation: #39;utf8mb4_unicode_ci#39;