如何无需双重for循环为HashMap二维数组填充空哈希表?
无需双重for循环初始化二维HashMap数组的方法
当然可以不用传统的双重for循环来初始化你的二维HashMap数组!下面是几种实用的原生Java方法,帮你实现需求:
方法1:结合Stream和Arrays.setAll
这个方法用Stream遍历每一行,再用Arrays.setAll初始化该行的每个元素,代码简洁且可读性强:
import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, String>[][] matrix = new Map[5][10]; Arrays.stream(matrix) .forEach(row -> Arrays.setAll(row, index -> new HashMap<String, String>())); } }
Arrays.stream(matrix)把二维数组转成流,逐个处理每一行Arrays.setAll(row, index -> new HashMap<>())会遍历当前行的每个位置,用lambda表达式创建新的空HashMap填充
方法2:用IntStream嵌套遍历
如果喜欢用流的方式处理索引,可以用IntStream.range来替代传统的for循环索引遍历:
import java.util.HashMap; import java.util.Map; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { Map<String, String>[][] matrix = new Map[5][10]; IntStream.range(0, matrix.length) .forEach(i -> IntStream.range(0, matrix[i].length) .forEach(j -> matrix[i][j] = new HashMap<String, String>())); } }
这里用IntStream.range生成行和列的索引范围,再通过forEach完成每个位置的初始化,完全没有显式的for循环语法。
补充说明
这些方法本质上还是在遍历数组,但它们用更简洁的函数式语法替代了传统的双重for循环写法。如果你的项目允许使用第三方库(比如Guava),还可以用Lists.transform之类的工具类,但上面的原生方法已经足够满足需求啦。
内容的提问来源于stack exchange,提问作者yalpsid eman
相关产品推荐
相关产品推荐

