public static Stream<Object> java8Flatten(Object[] arr) {
return Arrays.stream(arr).flatMap(obj -> obj instanceof Object[] ? java8Flatten((Object[]) obj) : Stream.of(obj));
}
public static int[] deepFlatten(Object[] arr) {
return Arrays.stream(arr).flatMapToInt(obj -> obj instanceof Object[] ? Arrays.stream(deepFlatten((Object[])obj)) : IntStream.of((Integer)obj)).toArray();
}
Object[] arr = {1, 2, new Object[]{1, 2, 44}, 4};
Object[] arr1 = java8Flatten(arr).toArray();
Object[] arr2 = java8Flatten(arr).map(String::valueOf).toArray();
String[] arr3 = java8Flatten(arr).map(String::valueOf).toArray(String[]::new);
List<String> arr4 = java8Flatten(arr).map(String::valueOf).collect(Collectors.toList());