`
badqiu
  • 浏览: 673873 次
  • 性别: 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 ...

    Java源码分析Iterable.pdf

    Java源码分析Iterable.pdf文件提供了Iterable接口的源码分析,包括Iterable接口的定义、实现和使用方法等内容。该文件可以帮助开发者更好地理解Iterable接口的实现机制,并且可以帮助开发者编写更加高效的代码。 ...

    字符串过滤类(StrUtil)

    - `equalsignorecase(String str1, String str2)`: 忽略大小写比较两个字符串是否相等。 7. **替换** - `replace(String str, String oldChar, String newChar)`: 在字符串中将所有出现的旧字符替换为新字符。 ...

    JDK1.5中增强for循环

    如果你希望自己的类能够支持增强 for 循环,那么可以通过实现 `Iterable` 接口来实现。实现步骤如下: 1. **实现 Iterable 接口**: ```java public class MyClass implements Iterable&lt;MyClass.MyObject&gt; { ...

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

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

    php函数解析

    ##### convert_cyr_string (string $str, string $from_encoding, string $to_encoding) : string **功能**:将字符由一种Cyrillic字符集转换到另一种。 **示例**: ```php echo convert_cyr_string("Привет",...

    python内置函数大全

    Python内置函数涉及了Python编程语言中最基础的函数集合,它们是Python标准库的一部分,...以上列举的只是一小部分Python内置函数,但它们是处理常见任务的基础。掌握这些函数能帮助开发者编写简洁、高效的Python代码。

    StringUtils 字符串常用工具

    - `equalsIgnoreCase(String str1, String str2)`:与 `equals()` 类似,但忽略大小写。 3. **字符串的拼接** - `join(Object[] array, String separator)`:将数组元素用指定的分隔符连接成一个字符串。 - `...

    只读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

    如果`iterable-queue`与ZooKeeper集成,那么它可能支持在分布式环境中实现高可用性和一致性。"云原生"则意味着这个库可能设计时考虑了微服务架构、容器化和持续部署等现代云技术的最佳实践。 至于"Python库",这是...

    string的用法的源代码资源

    本资源包可能包含了关于`string`的各种操作和用法的源代码示例,这对于我们理解和掌握字符串处理技巧非常有帮助。下面我们将深入探讨`string`的一些核心概念和常见操作。 1. **字符串定义**: - 字符串是由一个或...

    shuffle-iterable:反复洗牌

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

    Java增强的for循环

    注意:forin循环遍历的集合必须是实现Iterable接口的。例如: ```java void someFunction (){ List&lt;String&gt; list = new ArrayList(); list.add("Hello"); list.add("Java"); list.add("World!"); String s = "...

    classclass

    关于学习过程中的随手笔记:自定义Iterable接口 定义一个可变参数 ... 可变参数注意点 1. 调用时可传可不传 2. 可变参数实际上就是一个数组 3. 可变参数位于形参列表的最后一个位置 */

    python函数大全

    2. **any(iterable)**:如果iterable中至少有一个元素为True,则返回True,否则返回False,空iterable返回False。 3. **cmp(x,y)**:比较x和y的大小,返回-1、0或1,但在Python 3中已弃用,建议使用比较运算符。 #...

    python_str_python_

    - `str.join(iterable)`:使用字符串作为分隔符,将可迭代对象中的元素连接成新的字符串。 7. **格式化字符串**:Python提供多种格式化字符串的方式,如旧式 `%` 运算符,以及新式的 `str.format()` 方法和 f-...

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

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

    增强for(part1:part2)part3; 

    - **遍历对象**:可以是数组或实现了`Iterable`接口的集合类对象。 #### 三、增强for循环与传统for循环的区别 虽然增强for循环提供了一种更为简洁、易读的遍历方式,但它也有一定的局限性: 1. **无法修改索引**...

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

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

Global site tag (gtag.js) - Google Analytics