将多个 Iterable 包装成一个 Interable
假设我有两个 Collections
:
Collection< Integer > foo = new ArrayList< Integer >();
Collection< Integer > bar = new ArrayList< Integer >();
并假设有时我想单独迭代它们,但有时会一起迭代它们。有没有办法围绕 foo
和 bar
创建一个包装器,以便我可以迭代组合对,但每当 foo
时也会更新它和 bar
改变吗? (即 Collection.addAll()
不合适)。
例如:
Collection< Integer > wrapper = ... // holds references to both bar and foo
foo.add( 1 );
bar.add( 99 );
for( Integer fooInt : foo ) {
System.out.println( fooInt );
} // output: 1
for( Integer barInt : bar ) {
System.out.println( barInt );
} // output: 99
for( Integer wrapInt : wrapper ) {
System.out.println( wrapInt );
} // output: 1, 99
foo.add( 543 );
for( Integer wrapInt : wrapper ) {
System.out.println( wrapInt );
} // output: 1, 99, 543
谢谢!
Say I have two Collections
:
Collection< Integer > foo = new ArrayList< Integer >();
Collection< Integer > bar = new ArrayList< Integer >();
and say sometimes I would like to iterate over them individually, but sometimes together. Is there a way to create a wrapper around foo
and bar
so that I can iterate over the combined pair, but which is also updated whenever foo
and bar
change? (i.e. Collection.addAll()
is not suitable).
For example:
Collection< Integer > wrapper = ... // holds references to both bar and foo
foo.add( 1 );
bar.add( 99 );
for( Integer fooInt : foo ) {
System.out.println( fooInt );
} // output: 1
for( Integer barInt : bar ) {
System.out.println( barInt );
} // output: 99
for( Integer wrapInt : wrapper ) {
System.out.println( wrapInt );
} // output: 1, 99
foo.add( 543 );
for( Integer wrapInt : wrapper ) {
System.out.println( wrapInt );
} // output: 1, 99, 543
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用 Guava 的 Iterables.concat< /a> 方法。
Use Guava's Iterables.concat methods.
我为此编写了两个函数:
I wrote two functions for that :
查看 Apache Commons Collections - CollectionUtils 或 IteratorUtils。它们具有您正在寻找的方法类型。
Check out Apache Commons Collections - CollectionUtils or IteratorUtils. The have the type of methods you are looking for.
一个简单的 List 的 List 并不是那么多的样板文件:
如果你现在将 4 添加到 foo
foo.add (4);
中,你只需重复 2 个循环即可。问题出在哪里?A simple List of List isn't that much boilerplate:
If you now add 4 to foo
foo.add (4);
you just repeat the 2 loops. Where is the problem?像@barjak,但更短
Like @barjak, but shorter