import java.util.Set;
import java.util.LinkedHashSet;
import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Collectors;
public class Flatten2DArrayIntoASorted1DArrayWithUniqueValues {
// Function that flattens a 2D int array, removes duplicates, and returns a sorted Set
public static Set<Integer> flattenSortUnique(int[][] array2d) {
// Stream each row, flatten into one IntStream, remove duplicates,
// convert to boxed Integer stream, sort, and collect into a LinkedHashSet
// (LinkedHashSet preserves the sorted order)
return Arrays.stream(array2d)
.flatMapToInt(Arrays::stream)
.distinct()
.boxed()
.sorted(Comparator.naturalOrder())
.collect(Collectors.toCollection(LinkedHashSet::new));
}
public static void main(String[] args) {
int[][] array2d = {
{4, 3, 3, 2, 4},
{30, 10, 10},
{10, 30},
{1, 1, 6, 7, 7, 7, 8},
};
Set<Integer> set = flattenSortUnique(array2d);
// Print values as comma-separated list
System.out.println(
set.stream()
.map(String::valueOf)
.collect(Collectors.joining(", "))
);
// Print values with spaces
for (Integer n : set) {
System.out.print(n + " ");
}
}
}
/*
run:
1, 2, 3, 4, 6, 7, 8, 10, 30
1 2 3 4 6 7 8 10 30
*/