public class Hand implements Iterable<Card> {
private final List<Card> list = new ArrayList<>();
private final int capacity;
//...
@Override
public Iterator<Card> iterator() {
return list.iterator();
}
}
本质上,它包装了列表
,确保了最大容量,并提供了一些其他有用的特性。更好的方法是直接将其实现为列表
。
现在,为了方便起见,我认为最好实现iterable
,这样,如果您想要循环它,就可以使用增强的for-loops。(我的hand
类还提供了get(int index)
方法,因此我认为iterable
是合理的。)
iterable
接口提供以下功能(省略了javadoc):
public interface Iterable<T> {
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
Stream<Hand> stream = StreamSupport.stream(hand.spliterator(), false);
这不是遗漏;2013年6月对EG清单进行了详细讨论。
专家组的明确讨论正是基于这一思路。
虽然stream()
在iterable
上似乎是有意义的“显而易见”(甚至最初对专家组来说也是如此),但iterable
如此笼统的事实却成了一个问题,因为明显的签名:
Stream<T> stream()
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
Stream s = StreamSupport.stream(iter.spliterator(), false);
问题内容: 我想知道为什么接口不提供和方法。考虑以下类别: 它是 一手 牌的一种实现,因为您在玩交易纸牌游戏时可以手拿牌。 本质上,它包装了,可确保最大容量并提供其他一些有用的功能。最好将其直接实现为。 现在,为了方便起见,我认为实现起来会很不错,这样,如果您想对其进行循环,则可以使用增强的for循环。(我的课程也提供了一种方法,因此我认为该方法是合理的。) 该界面提供了以下内容(省略了javad
问题内容: 我一定在这里想念什么。 在Java 5中,引入了“ for- each循环”语句(也称为增强的for循环) 。似乎引入它主要是为了遍历 Collections 。任何实现该接口的集合(或容器)类都可以使用“ for- each循环”进行迭代。也许出于历史原因,Java数组未实现Iterable接口。但是由于数组是普遍存在的,因此可以接受在数组上使用for- each循环(生成与传统的f
问题内容: 有人知道为什么JUnit 4提供但不提供方法吗? 它提供了(对应于)和(对应于),因此它们似乎没有包含在内就显得很奇怪。 顺便说一下,我知道JUnit插件提供了我正在寻找的方法。我只是出于好奇而问。 问题答案: 我建议您使用较新的样式断言,该断言可以轻松描述各种否定形式,并在断言失败时自动构建对您的期望和得到的结果的描述: 这三个选项都是等效的,请选择最容易阅读的一个。 要使用方法的简
我很想知道为什么Java的可选不提供类似于流的方法。 接口的method javadoc声明: @apiNote此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到这些元素 这几乎完全描述了我的用例: (返回 方法,上述所有内容都会转换为: 也可以这样做(参见此答案): 并将其与方法一起使用: 但我认为这是一个黑客,而不是的干净用法。 从Java 9开始,可以将< code>Optiona
问题内容: Iterables提供了两种方法 但只有一个 是否存在任何破坏对称性的设计/实现原因? 问题答案: 我认为要点是,没有理由可以使用来完成此操作。Guava尽力使API保持较小,因此没有添加可以/应该以其他方式轻松完成的事情。 另一方面,还没有一种机制可以测试iterable是否为空,如果是,则返回默认值而不是第一个值。因此,。 同样,没有简单的方法来获取最后一个元素,因此和
问题内容: 查看Guava的ImmutableList(和其他一些类),您会发现很多重载的便捷方法(“按顺序返回包含给定元素的不可变列表”。)这些方法使用不同数量的参数: 一直到这一步: 我的一些同事认为这很愚蠢,想知道为什么不只有一种方法:。他们怀疑这是不正确的性能“优化”,属于“您认为自己比编译器更聪明”之类的东西。 我的直觉是Kevin Bourrillion等。出于真正的原因将这些方法放在