`
badqiu
  • 浏览: 670470 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

小技巧:通过Iterable实现 for(String str : reader)

阅读更多

在python中读取文件可以很简单的使用

 

for line in myfile.readlines():
    print line

 

 

而在jdk1.5中,只要我们的类实现了Iterable接口的,即也可以使用如下语句, for(Object o : iterable);

Iterable的接口声明如下.

 

public interface Iterable<T> {

    /**
     * Returns an iterator over a set of elements of type T.
     * 
     * @return an Iterator.
     */
    Iterator<T> iterator();
}

 

 也即返回一个迭代器Iterator接口即可. 所以我们现在来改造我们的Reader,实现如下:

 

public class IterableReader extends BufferedReader implements Iterable<String>{

	public IterableReader(Reader in) {
		super(in);
	}

	public Iterator<String> iterator() {
		return new IteratorReader();
	}
	
	class IteratorReader implements Iterator{
		String line = null;
		public boolean hasNext() {
			try {
				line = readLine();
			} catch (IOException e) {
				return false;
			}
			if(line == null) {
				return false;
			}
			return true;
		}

		public Object next() {
			return line;
		}

		public void remove() {
			throw new UnsupportedOperationException();
		}
	}
}

 

 

现在我们的reader即可如下使用

 

StringReader r = new StringReader(" 111 \n 222 \n 333");
IterableReader reader = new IterableReader(r);
for(String str : reader) {
	System.out.println(str);
}

 

 是否感觉简洁了许多呢? :)

 

 

 

 


分享到:
评论
7 楼 zidafone 2013-11-02  
学习了,以前以为只有array和list可以用in操作符
原来iterator的实现都可以呀
这个小语法技巧挺好玩的
6 楼 mpxsq 2009-11-29  
流不用关闭了?
5 楼 kjj 2009-11-27  
其实scanner 和楼主的意思差不多
4 楼 badqiu 2009-11-27  
一:并不是所有人都知道有Scanner这个类,比如我
二:这里没有轮子,只是演示for(String str : reader),难道你认为跟Scanner一样。
3 楼 Eastsun 2009-11-27  
badqiu 写道
Scanner不行吧,要注意Iterator与Iterable接口之间的区别


囧,把Scanner包装一下不就OK了吗?
用的着自己去重造这个轮子嘛
2 楼 badqiu 2009-11-27  
Scanner不行吧,要注意Iterator与Iterable接口之间的区别
1 楼 Eastsun 2009-11-27  
用 java.util.Scanner ...

相关推荐

    iterable-php-wrapper:用于Iterable APIPHP包装器(http

    使用您的API密钥实例化该类: $ iterable = new Iterable ( 'YOUR API KEY' );例子清单显示所有列表: $ iterable -&gt; lists (); 订阅用户到列表: $ iterable -&gt; list_subscribe ( $ list_id , array (array ( '...

    is-empty-iterable:检查Iterable是否为空

    检查Iterable是否为空 比Array.from(iterable).length效率更高,因为它仅迭代第一项,这对于动态迭代器可能会产生很大的影响,例如Generator执行昂贵的操作。 安装 $ npm install is-empty-iterable 用法 import ...

    【JavaScript源代码】详解ES9的新特性之异步遍历Async iteration.docx

     目录 异步遍历异步iterable的遍历异步iterable的生成异步方法和异步生成器 异步遍历 异步iterable的遍历 异步iterable的生成 异步方法和异步生成器 异步遍历 在讲解异步遍历之前,我们先回想一下ES6中的...

    magic-iterable:通过在Iterable本身上调用对Iterable中的所有项目调用方法

    魔术可迭代的通过在Iterable本身上调用对Iterable中的所有项目调用方法使用 。安装 $ npm install magic-iterable用法 const magicIterable = require ( 'magic-iterable' ) ;const x = {i : 0 ,increment ( value )...

    Python库 | iterable_orm-0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:iterable_orm-0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    只读Key-Value存储系统PalDB.zip

    PalDB 是 LinkedIn 开源的可嵌入...for (Map.Entry&lt;String, String&gt; entry : iterable) {  String key = entry.getKey();  String value = entry.getValue();  } reader.close(); 标签:PalDB

    PyPI 官网下载 | iterable-queue-1.2.0.tar.gz

    资源来自pypi官网。 资源全名:iterable-queue-1.2.0.tar.gz

    shuffle-iterable:反复洗牌

    支持的类型: Array, Object, String 。 更新:暂时删除了es6类型支持。 用法 npm install shuffle-iterable var shuffle = require ( 'shuffle-iterable' ) ; var obj = { a : 5 , b : 10 , c : 15 } ; shuffle ( ...

    小程序反编译脚本.zip

    2.下载模拟器-&gt;微信-&gt;搜索你要扒取的小程序(点开即可) 3.打开RE文件管理器,获取root权限,从根目录开始。/data/data/com.tencent.mm/MicroMsg/.../appbrand/pkg/,路径中有一段...,这里表示不确定具体一个,一般...

    Java源码分析Iterable.pdf

    Java源码分析Iterable.pdf

    iterable-string-interceptor:拦截可迭代的字符串-模板的主干

    迭代字符串拦截器拦截可迭代字符串-模板的主干import { iterableStringInterceptor } from "iterable-string-interceptor" ;import { createReadStream } from "fs" ;// double values inside {{}}// {{7}} -&gt; 14for...

    《Python数据分析基础》笔记:“TypeError, ‘int’ object is not iterable”

    学习《Python数据分析基础》第3章最后一个例子:为每个工作簿和工作表计算总数和均值时,在pandas 实现这个例子中的data 处出现报错 此处原例子没有添加str(),但是我运行是出现报错 TypeError, ‘int’ object is ...

    Python学习笔记之For循环用法详解

    Python 有两种类型的循环:for 循环和 while 循环。for 循环用来遍历可迭代对象。 可迭代对象是每次可以返回其中一个元素的对象, 包括字符串、列表和元组等序列类型,以及字典和文件等非序列类型。还可以使用迭代器...

    summingbird:通过缩放和风暴流式传输MapReduce

    def wordCount ( source : Iterable [ String ], store : MutableMap [ String , Long ]) = source.flatMap { sentence =&gt; toWords(sentence).map(_ - &gt; 1L ) }.foreach { case (k, v) =&gt; store.update(k, store...

    Python any()函数的使用方法

    for element in iterable: if element: return True return False 意思是:判断一个tuple或者list是否全部为空、0、False。如果全为空、0、False,则返回False;如果(只要有非[空或0或False])不全为空、0、...

    Python库 | iterable-api-0.1.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:iterable-api-0.1.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    iterable:纯函数迭代遍历

    iterable:纯函数迭代遍历

    androidGPS经纬度速度方向

    String str = "当前位置:\n"; //获取系统服务 lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE); statusListener = new GpsStatus.Listener() //GPS状态监听器 { @...

    JavaScript之iterable_动力节点Java学院整理

    具有iterable类型的集合可以通过新的for ... of循环来遍历。 for ... of循环是ES6引入的新的语法,请测试你的浏览器是否支持: 'use strict'; var a = [1, 2, 3]; for (var x of a) { } alert&#40;'你的浏览器...

    Python迭代器Iterable判断方法解析

    迭代器(Iterable):能直接作用于for循环的对象,统称可迭代对象。例如:list、tuple、set、str、generator都是可迭代对象。 1、如何判断一个对象是否可迭代: # 如何判断一个对象是可迭代对象 #导入collections....

Global site tag (gtag.js) - Google Analytics