Java中嵌套集合/结构的类型安全展开

Java中嵌套集合/结构的类型安全展开,java,generics,collections,type-safety,lambdaj,Java,Generics,Collections,Type Safety,Lambdaj,我想展平Java中某些类型T元素的任意深度嵌套集合/结构,最好使用 只有实时视图,没有复制的集合 不仅处理集合,还处理迭代器、任意维T数组、Iterable以及所有这些任意混合和嵌套的结构 静态型安全 有没有一个java库可以处理这个问题 似乎只处理一个嵌套级别,即集合--展平-->集合 看起来很有希望:我可以通过某种方式将on()、asiiterator()和flatteiterator()组合起来实现这一点吗?以静态类型安全的方式?我认为这可能会有所帮助:Arrays.deepToSt

我想展平Java中某些类型T元素的任意深度嵌套集合/结构,最好使用

  • 只有实时视图,没有复制的集合
  • 不仅处理集合,还处理迭代器、任意维T数组、Iterable以及所有这些任意混合和嵌套的结构
  • 静态型安全
有没有一个java库可以处理这个问题


似乎只处理一个嵌套级别,即
集合
--展平-->
集合


看起来很有希望:我可以通过某种方式将
on()
asiiterator()
flatteiterator()
组合起来实现这一点吗?以静态类型安全的方式?

我认为这可能会有所帮助:
Arrays.deepToString(myCollection.toArray())
不基于上述任何一种,但可能是一个由其下一个()方法查看下一个对象,如果它是集合的实例,则将当前迭代器推送到堆栈上,并递归到该集合的迭代器中

番石榴可能最终会支持这一点:


(自下而上阅读可能是最容易的,因为对它的思考在它的生命周期中已经改变了好几次。)

不是基于上述任何一种,而是可能是一个由
集合构建的
DeepIterator
类,其
下一个()
方法查看下一个
对象
,如果它是集合的
实例
,则将当前的
迭代器
推到
堆栈
上,并递归到该
集合
的迭代器中。是的,我以这种方式实现了一些迭代器。不过,必须对任意维数组和迭代器进行区分是相当棘手的。而且没有静态类型安全性:(因为lambdaj可能至少实现得同样好,我认为我不应该这样实现……这里的静态类型安全是什么意思?因为集合(实际上是ADG)可以包含不同类型的元素,迭代器只能提供
Object
s。我遗漏了什么吗?至少对于所有任意深度嵌套的集合,您可以在编译时检测到leaf都是类型T。因为lambdaj提供了很多感觉是动态类型的函数(例如,对每个项调用一个方法),但实际上仍然是静态类型的,我希望lambdaj能够在编译时处理更多的结构和检查。
DeepIterator
aproach听起来很有希望,但我认为您无法实现通用的静态类型安全解决方案。我不知道您如何在Java中表达这样的实体。对于检索字符串,是的。对于检索el类型T的元素,不幸的是,这没有帮助。@daveball我认为它仍然可以工作,您需要检查代码中的deepToString,这还取决于类型T是否实现了toString
deepToString()
也不处理数组。也就是说,如果其中一个元素是
数组
它将调用
toString
,而不是
数组。deepToString
。奇怪但正确。@DaveBall我认为Suraj的意思是
getDeclaredMethods()
,它将告诉您
是否实现了
toString()
本身。但我不知道这有什么帮助。你不想知道对象的字符串表示形式是什么,你想在所有对象上使用迭代器。我在读你的文章时有一种似曾相识的感觉;)但是,把它作为一个真正的答案是一个好主意——让我们看看它的投票结果……@DaveBall如果我能被否决一个正确的答案,也许我能被否决一个部分答案:)