串联列表的java列表视图
我想创建一个列表视图,该视图由许多其他列表串联而成
例如:
List<Integer> l1 = Lists.newArrayList(1);
List<Integer> l2 = Lists.newArrayList(2);
List<Integer> l3 = Lists.newArrayList(3);
// This call should not copy any of the argument lists content
List<Integer> concatenation = new ConcatenationListView(l1, l2, l3);
System.out.println(concatenation); // Prints [1, 2, 3]
l3.add(4);
System.out.println(concatenation); // Prints [1, 2, 3, 4]
我可以在Java中使用什么样的技术和/或模式来满足这些需求
# 1 楼答案
你可以用Java8 Stream-API来做这个
这将创建一个由三个列表组成的流,然后通过将每个列表转换为流本身(
List::stream
)并将它们放在一起,将每个列表中的所有项目连接在一起。毕竟,它输出控制台上的每个元素另外:默认情况下,流是惰性的,这意味着
Source
# 2 楼答案
下面是一个类的实现,该类充当多个列表串联的视图
这不需要太多的台词:
# 3 楼答案
Java类库没有这样的组合类,所以您需要自己编写
由于您希望该类允许修改基础列表,因此没有比O(L)更好的效率,O(L)中
L
是视图管理的列表数,因为索引转换需要您在每次需要读取或插入特定索引时遍历列表另一方面,这使得实现非常简单-转换索引的代码如下所示: