首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA中二维数组函数交换元素的方法

JAVA中二维数组函数交换元素的方法
EN

Stack Overflow用户
提问于 2019-10-26 22:04:40
回答 1查看 29关注 0票数 0

我正在尝试将命令式转置函数重构为声明性函数。下面是命令式实现:

代码语言:javascript
复制
for (int i = 0; i < routes.length; i++) {
        for (int j = i; j < routes.length; j++) {
            Route temp = routes[j][i];
            routes[j][i] = routes[i][j];
            routes[i][j] = temp;
        }
    }

这是我的孤注一掷的尝试,由于认知负荷的原因:

代码语言:javascript
复制
Arrays.stream(routes).forEach(routes1 -> Arrays.stream(routes1).forEach(
            route -> {
                Route temp ??
            }
    ));

我猜解决方案在于使用map而不是forEach,但我不确定。

EN

回答 1

Stack Overflow用户

发布于 2019-10-26 22:38:35

你可以这样做:

代码语言:javascript
复制
int[][] routes = {{1, 2, 3},
                  {4, 5, 6},
                  {7, 8, 9}};

// convert columns to rows
Map<Integer, List<AbstractMap.SimpleEntry<Integer, Integer>>> rows = Arrays.stream(routes)
        .flatMap(ints -> IntStream.range(0, ints.length).mapToObj(i -> new AbstractMap.SimpleEntry<>(i, ints[i])))
        .collect(Collectors.groupingBy(AbstractMap.SimpleEntry::getKey));

// extract values from rows
Integer[][] result = rows.values().stream().map(simpleEntries -> simpleEntries.stream()
        .map(AbstractMap.SimpleEntry::getValue).toArray(Integer[]::new))
        .toArray(Integer[][]::new);

输出

代码语言:javascript
复制
1 4 7 
2 5 8 
3 6 9 

您可以将转置矩阵看作是将列转换为行,这是这里的基本思想。在第一个映射中,我们根据列索引对值进行分组,这将是新行,第二部分只是从Map中提取值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58571477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档