查看java源代码

/*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package java.lang; import java.util.Iterator;
import java.util.Objects;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer; /**
* Implementing this interface allows an object to be the target of
* the "for-each loop" statement. See
* <strong>
* <a href="{@docRoot}/../technotes/guides/language/foreach.html">For-each Loop</a>
* </strong>
*
* @param <T> the type of elements returned by the iterator
*
* @since 1.5
* @jls 14.14.2 The enhanced for statement
*/
public interface Iterable<T> {
/**
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
Iterator<T> iterator(); /**
* Performs the given action for each element of the {@code Iterable}
* until all elements have been processed or the action throws an
* exception. Unless otherwise specified by the implementing class,
* actions are performed in the order of iteration (if an iteration order
* is specified). Exceptions thrown by the action are relayed to the
* caller.
*
* @implSpec
* <p>The default implementation behaves as if:
* <pre>{@code
* for (T t : this)
* action.accept(t);
* }</pre>
*
* @param action The action to be performed for each element
* @throws NullPointerException if the specified action is null
* @since 1.8
*/
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
} /**
* Creates a {@link Spliterator} over the elements described by this
* {@code Iterable}.
*
* @implSpec
* The default implementation creates an
* <em><a href="Spliterator.html#binding">early-binding</a></em>
* spliterator from the iterable's {@code Iterator}. The spliterator
* inherits the <em>fail-fast</em> properties of the iterable's iterator.
*
* @implNote
* The default implementation should usually be overridden. The
* spliterator returned by the default implementation has poor splitting
* capabilities, is unsized, and does not report any spliterator
* characteristics. Implementing classes can nearly always provide a
* better implementation.
*
* @return a {@code Spliterator} over the elements described by this
* {@code Iterable}.
* @since 1.8
*/
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}

最新文章

  1. Windows服务已经标记为删除
  2. 企业IT管理员IE11升级指南【6】—— Internet Explorer 11面向IT专业人员的常见问题
  3. PHP文件上传至另一台服务器
  4. 汇编语言学习与Makefile入门
  5. python 二叉树
  6. 【基础语法】a++与++a的区别
  7. Windows驱动开发(中间层)
  8. 【转】asp.net Cookie值中文乱码问题解决方法
  9. tachyon 命令行接口
  10. css与 js动画 优缺点比较
  11. mysql插入大量数据
  12. js获取当前日期,网页头部用
  13. 【CSS学习笔记】字体的控制
  14. ThinkPHP中:多个项目共享同一个session问题
  15. 在Javaava中stringBuilder的用法
  16. linux 巨页使用测试以及勘误1
  17. Python基础__函数
  18. SharePoint 2013 入门教程 [不断更新~]
  19. 搭建自己的Webpack项目
  20. vue文档阅读笔记——计算属性和侦听器

热门文章

  1. localtime 和 localtime_r 的区别
  2. ICE 的回调
  3. fastCGI模块
  4. 总结的一些MySQL数据库面试题
  5. HDU - 5412 CRB and Queries (整体二分)
  6. php处理redis
  7. Poj 1631 Bridging signals(二分+DP 解 LIS)
  8. (转)通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
  9. java代码继承------多层继承
  10. MySQL 学习四 SQL优化