package com.shekhargulati.ninetynine_problems._01_lists;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
/**
* <b>(**) Flatten a nested list structure</b>
* <p>
* Transform a list, possibly holding lists as elements into a 'flat' list by replacing each list with its elements (recursively).
* </p>
*/
public class P07 {
public static <T> List<T> flatten(List<?> list, Class<T> elementType) {
List<T> flatten = new ArrayList<>();
list.forEach(e -> {
if (e instanceof List) {
flatten.addAll(flatten((List<?>) e, elementType));
} else {
flatten.add((T) e);
}
});
return flatten;
}
public static <T> List<T> flatten_stream(List<?> list, Class<T> elementType) {
return list
.stream()
.flatMap(e -> e instanceof List ? flatten_stream(((List<?>) e), elementType).stream() : Stream.of(e))
.map(e -> (T) e)
.collect(toList());
}
}