2d整数数组,用于按升序返回每个维的唯一集合

问题描述

创建一个方法uniqueValue,该方法返回2d整数数组集合。该方法接受2d整数数组,以便为​​每个维度以升序返回唯一集合。

示例:

输入:

int [][] myArray = {
        { 5,32,8,45,9,10,1,2,6,8 },{ 4,3,7,2 }
};

输出

int[][] newArray = {
        { 1,5,45 },{1,4,7}

};

解决方法

以下解决方案使用Java Stream API:

static int[][] sortAndRemoveDuplicates(int[][] arr) {
    return Arrays.stream(arr)  // Stream of int[]
                 .map(row ->   // process each row
                     IntStream.range(0,row.length)  // analog of for loop,stream of indexes
                              .map(i -> row[i])      // convert to stream of int elements
                              .sorted()              // sort in ascending order by default
                              .distinct()            // remove duplicates
                              .toArray()             // build int[] array
                 )
                 .toArray(int[][]::new);  // build result 2D array
}

测试:

int[][] myArray = {
    {5,32,8,45,9,10,1,2,6,8},{4,3,7,2}
};

int[][] newArray = sortAndRemoveDuplicates(myArray);
Arrays.stream(newArray)
      .map(Arrays::toString)
      .forEach(System.out::println);

输出:

[1,5,45]
[1,4,7]
,

java提供了一个名称为Arrays的类,它为您提供了很多选择,例如,我曾经对数组进行排序,然后删除了重复项:

int[][] myArray = { { 5,8 },{ 4,2 } };

for (int i = 0; i < myArray.length; i++) {
    Arrays.sort(myArray[i]);
    myArray[i] = Arrays.stream(myArray[i]).distinct().toArray();
}

for (int i = 0; i < myArray.length; i++) {
    System.out.println(Arrays.toString(myArray[i]));
}