java - 在二维数组Java中重新分配具有特定值的所有整数
问题描述
假设我有一个二维数组,网格定义如下:
int[][] x = new int[][]{{0,0,1},{0,0,2},{0,0,3}};
现在假设我想将网格中值为 0 的所有位置重新分配给 Integer.MAX_VALUE
我可以在 Java 10 中做到这一点:
for(var row : grid)
for(int i=0; i<row.length; i++)
if(row[i] ==0) row[i]=Integer.MAX_VALUE;
有没有办法可以在不创建新数组的情况下缩短它?我知道我可以使用流,但这不会创建一个新数组,浪费内存吗?
解决方案
刚刚查看了 Java 10 docs Arrays类,看看它可能提供什么。
for(var row : arrayOfArrays)
Arrays.setAll(row, i -> row[i] == 0 ? Integer.MAX_VALUE : row[i]);
仅有助于删除一行,并且仅适用于内部循环。
请注意,它List<E>
有一个forEach(Consumer<E>)
方法(从 实现Iterable<E>
),因此您可以将其forEach
用于外部循环。但是,当我说您可以尝试时,我是不正确的,List<List<int>>
因为您将无法使用消费者变量来设置变量。您仍然可以这样做List<int[]>
,然后尝试以下操作。
List<int[]> listOfArrays = new ArrayList<>();
//Fill in values
listOfArrays.forEach(inner -> Arrays.setAll(inner, i -> inner[i] == 0 ? Integer.MAX_VALUE : inner[i]));
推荐阅读
- java - 如何在 Android WebView 中获取单页 Web 应用的 URL?
- c - 从简单链表中删除节点
- java - Android中没有预期的输出
- javascript - 点击事件不适用于仅使用 Javascript 的轮播
- docker - Hortonworks HDP docker如何公开端口
- typescript - Typescript 中的动态键
- python - 无法从外部应用程序发送 JSON,但我的 Django 测试有效
- python - 删除 XML 声明标记的 Python 代码
- asp.net - Razor 和 MVC 页面的 Asp.net Core 应用程序问题
- c - 相同的 C 程序但不同的执行时间