Java综合列表

Ama*_*icA 3 java collections guava apache-commons-collection

我正在寻找一个具有复合列表实现的开源库.我需要一个列表,从其他列表中读取其值,并可以构造如下:

List list1 = new ArrayList();
list1.add("0");
List list2 = new LinkedList();
list2.add("1");
list3.add("2");
List list3 = new CompositeList(list1, list2...)
Run Code Online (Sandbox Code Playgroud)然后:
assertEquals("0", list3.get(0));
assertEquals("1", list3.get(1));
assertEquals("2", list3.get(2));
Run Code Online (Sandbox Code Playgroud) 我的想法是,我不需要复制源列表中的所有内容.

一个快速的谷歌没有找到任何东西,我没有在番石榴或公共收藏中看到它(我可能忽略了它).我现在没有足够的时间正确实施它.

Eti*_*veu 11

我今天早上在Guava里寻找类似的东西,最后偶然发现了Iterables.concat().

您专门询问了List视图,因此这可能无法完全解决您的问题,但这是一个要记住的选项.

我还以为我最初需要一个Collection/List,但我后来意识到解决我的问题不是强制性的:我主要是在寻找能够连接多个迭代(通过各种Guava过滤/转换获得)的东西,然后过滤/转换结果,最终将其转储到ImmutableList中.如果您只需要迭代结果,则返回Iterable视图也是一个选项.

PS(几年后):这些转换/连接现在也可以使用Guava FluentIterable或Java 8流完成.


Val*_*her 7

来自Commons Collections的CompositeCollection似乎可以满足您的需求,即使它没有被广泛化.

  • @R.Bemrose:有各种类型的装饰器类实例需要你*从那时起*才使用装饰器才能正常工作.如果你从`Collections`获得`unmodifiableList`,你仍然可以返回并更改你传入的列表,从而改变不可修改的列表.如果OP不符合使用条件,则无法保证.现在,肯定应该在Javadoc中记录*... (5认同)