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;@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适配器方法惯用法相关推荐
- Android Gradle plugin requires Java 11 to run 解决方法
当Java版本不正确时,Gradle的sync阶段回报错如下: An exception occurred applying plugin request [id: 'com.android.appl ...
- java class equals_Java中equals方法的用法
一.Object类中的equals方法 所有类都从Object类中继承了equals方法. Object类中equals方法源代码如下: public boolean equals (Object o ...
- Java 11:String类中的新方法
Java 11:String类中的新方法 Java 11没有很多特定于语言的功能.因此,令人惊讶的是,在Java String Class中引入了6种新方法. Java 11 String类新方法 让 ...
- Java 11:字符串类中的新方法
Java 11 doesn't have a lot of language specific features. So, it was surprising to see 6 new methods ...
- 在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- ...
- 转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议11~15)...
阅读目录 建议11:养成良好习惯,显示声明UID 建议12:避免用序列化类在构造函数中为不变量赋值 建议13:避免为final变量复杂赋值 建议14:使用序列化类的私有方法巧妙解决部分属性持久化问题 ...
- Java 11新字符串方法的基准
在检查Java 11的新增功能时,我发现String类有几种新方法. 所以我想用旧的做事方法和使用新方法做一个微基准测试. 这些新方法是: boolean isBlank()String strip( ...
- Apache Ant 1.9.13和1.10.5发布–支持Java 11单文件源程序
我们刚刚发布了Apache Ant的1.9.13和1.10.5版本 . 与往常一样,您可以从Ant项目下载页面下载它. 这两个版本主要是错误修复版本. 但是,1.10.5版对" java&q ...
- Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法
文章目录 前言 一.JDK 11(Java 11)之后 JRE 说明 二.选择自己需要的 JDK 版本 三.对下载的 JDK 进行解压 四.执行 Dos 命令生成 JRE 总结 前言 我们之前的 JD ...
- 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 ...
最新文章
- pytorch numpy 数据类型转换
- 【网摘】检测 iframe 是否加载完成
- 特斯拉「断网」致500名车主被锁车外,最长5小时,网友:有些东西就不该经过网络...
- 印度视觉设计师Rishab平面设计作品,简直太美了!
- Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
- liunx下搭建mysql主从_linux下搭建mysql主从
- 大年30还多少天_大美鹅老李告诉你30天的鹅需要多少温度?
- 设计素材|手机UI界面模板psd源文件格式!
- 相机获取的照片向左自动旋转90度解决方法
- 【TSP】基于matlab GUI遗传算法求解旅行商问题【含Matlab源码 1333期】
- oracle根据中文获取拼音全拼函数
- 通达信炒股软件测试简历,专家看盘(通达信公式 副图 源码 测试图)
- 你和财务自由之间,只差一个公式
- 诺基亚培育低端机市场 迂回战术威胁中华酷联
- 学计算机如何护眼,长期看电脑如何保护眼睛 吃这些有效保护视力
- 详解Nginx Rewrite标记last和break的区别
- xml大于等于转移_Mybatis.xml文件中大于小于等于
- QEMU中TCG翻译流程
- 黑产反诈有方法,异常识别我在行—欺诈反洗钱等领域用得最多的经典算法
- Re: Object Oriented