Java 矩阵重复提取

Java 矩阵重复提取,java,Java,我有200列和80000行数据 行包含重复的数据 我只想从行中的重复数据中提取唯一的数据,但只在重复行中的列中保留最大值 我怎么做 ex) 以前 之后 谢谢从给定的示例中,可以假设矩阵包含一列,用于标识行(rowId) 然后可以使用流API解决此任务: 使用Collectors.toMap 使用rowId列作为键,整行(int[])是一个值 对值执行合并功能以保持最大值 静态int[]filterMatrix(int[]arr){ 返回数组.stream(arr) .collect(collec

我有200列和80000行数据

行包含重复的数据

我只想从行中的重复数据中提取唯一的数据,但只在重复行中的列中保留最大值

我怎么做

ex) 以前

之后


谢谢

从给定的示例中,可以假设矩阵包含一列,用于标识行(rowId)

然后可以使用流API解决此任务:

  • 使用
    Collectors.toMap
  • 使用rowId列作为键,整行(
    int[]
    )是一个值
  • 对值执行合并功能以保持最大值
  • 静态int[]filterMatrix(int[]arr){
    返回数组.stream(arr)
    .collect(collector.toMap)(
    a->a[0],//假设第一列包含rowId
    a->a,
    (a1,a2)->IntStream.range(0,a1.length)
    .map(i->Math.max(a1[i],a2[i]))
    .toArray()
    ))
    .values()
    .stream()//流-行流
    .toArray(int[]]::新建);
    }
    
    测试(缩写):

    int[]m=newint[]{
    {1, 0, 0,  4,  5},
    {1, 3, 0,  1,  0},
    {2, 2, 0,  1,  1},
    {3, 0, 7,  1,  8},
    {3, 0, 6,  9, 17},
    {3, 0, 0, 12,  1},
    };
    int[]max=filterMatrix(m);
    对于(int[]r:max){
    System.out.println(Arrays.toString(r));
    }
    
    输出:

    [1, 3, 0, 4, 5]
    [2, 2, 0, 1, 1]
    [3, 0, 7, 12, 17]
    

    欢迎来到StackOverflow。请给我们看看你的作品。您应该先自己解决问题。行中是否包含允许按此列分组的
    id
    列(例如第一列中的
    r1
    r3
    )?
        s1  s2  s3  ..  s200
    r1   3   0   4  ..     5  
    r2   2   0   0  ..     1 
    r3   0   9   6   ..   17
    
    [1, 3, 0, 4, 5]
    [2, 2, 0, 1, 1]
    [3, 0, 7, 12, 17]