Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Type-safe flattening of nested collections/structures in Java

I would like to flatten arbitrary deeply nested collections/structures of elements of some type T in Java, optimally with

  • only having a live view and not a copied collection;
  • not only handling Collections, but also Iterator, arrays of T of arbitrary dimension, Iterable, and all these structures arbitrarily mixed and nested;
  • statical type-safety.

Is there a java library which can handle this?


Guava seems to only handle one nesting level, i.e. Collection<Collection<T>> --flatten--> Collection<T>.

lambdaj looks promising: can I somehow combine on(), asIterator() and flattenIterator() to achieve this? In a statically type-safe manner?

like image 479
DaveFar Avatar asked Sep 15 '11 12:09

DaveFar


People also ask

How to flatten a nested List in Java?

Stream flatMap() method is used to flatten a Stream of collections to a stream of objects. The objects are combined from all the collections in the original stream. The flatMap() method is a one-to-many transformation to the elements of the stream and then flattening the resulting elements into a new stream.

How do you flatten an Arraylist?

flatMap() method. The standard solution is to use the Stream. flatMap() method to flatten a List of Lists. The flatMap() method applies the specified mapping function to each element of the stream and flattens it.


2 Answers

Guava will probably support this eventually :

http://code.google.com/p/guava-libraries/issues/detail?id=174

(It might be easiest to read that from the bottom up, since the thinking on it has shifted a few times over its lifetime.)

like image 133
Kevin Bourrillion Avatar answered Oct 13 '22 20:10

Kevin Bourrillion


Not based on either of the above, but perhaps a DeepIterator class that is constructed with a Collection whose next() method looks at the next Object and if it is a instanceof Collection then pushes the current iterator on Stack and recurses into that Collection's iterator.

like image 35
Miserable Variable Avatar answered Oct 13 '22 22:10

Miserable Variable