首页 > 解决方案 > 如何以指定格式构造数据?

问题描述

在项目的某个地方,我需要使用 Java 以语法等格式构造数据:

{String: [(int, int),(int, int),...]};

例子:

{"some expression": [(1, 20), (2,15),...]};

我尝试使用地图集合。不知何故,我能够将外部结构格式化为 Map,但在 arraylist 中格式化数据时遇到了麻烦。

    HashMap<String, ArrayList> expressionRanges = new HashMap<String, ArrayList>();

如何使用 Java 获取上述示例中指定的结构?

标签: javacollections

解决方案


我想你可以通过以下任何一种方式来做到这一点:

使用 Map 与 String 作为Key和 2D Integer Array 作为Value

// Declare the Map
Map<String, int[][]> expressionRanges = new HashMap<>();

// Declare the 2D Integer Arrays and fill them...
int[][] a = {{1, 20}, {2,15}, {3,30}};
int[][] b = {{6, 5}, {7,10}, {8,15}, {9,20},{10,25}};

// Add Integer Arrays to Map as values 
expressionRanges.put("Some Expression", a);
expressionRanges.put("Other Expression", b);

// Get 2D Integer Array from Map based on supplied Key string
int[][] tmp = expressionRanges.get("Other Expression");
// Display the contents of the 2D Integer Array
for (int i = 0;i < tmp.length; i++) {
    for (int j = 0; j < tmp[i].length; j++) {
        System.out.print(tmp[i][j] + "\t");
    }
    System.out.println();
}

如果运行它会在控制台窗口中显示以下内容:

6     5 
7     10    
8     15    
9     20    
10    25

使用 Map 与 String 作为Key和 2D ArrayList 作为Value

// Declare the Map
Map<String, ArrayList<ArrayList<Integer>>> expressionRanges = new HashMap<>();

// Declare the 2D ArrayLists of Integer Type and fill them...
ArrayList<ArrayList<Integer>> a1 = new ArrayList<>();
    ArrayList<Integer> b1 = new ArrayList<>(); 
        b1.add(1); 
        b1.add(20); 
        a1.add(b1); 
    ArrayList<Integer> b2 = new ArrayList<>(); 
        b2.add(2); 
        b2.add(15); 
        a1.add(b2); 
    ArrayList<Integer> b3 = new ArrayList<>(); 
        b3.add(3); 
        b3.add(30); 
        a1.add(b3); 

ArrayList<ArrayList<Integer>>a2 = new ArrayList<>();
    ArrayList<Integer> b4 = new ArrayList<>(); 
        b4.add(6); 
        b4.add(5); 
        a2.add(b4); 
    ArrayList<Integer> b5 = new ArrayList<>(); 
        b5.add(7); 
        b5.add(10); 
        a2.add(b5);  
    ArrayList<Integer> b6 = new ArrayList<>(); 
        b6.add(8); 
        b6.add(15); 
        a2.add(b6); 
    ArrayList<Integer> b7 = new ArrayList<>(); 
        b7.add(9); 
        b7.add(20); 
        a2.add(b7); 
    ArrayList<Integer> b8 = new ArrayList<>(); 
        b8.add(10); 
        b8.add(25); 
        a2.add(b8); 

// Add ArrayLists to Map as values            
expressionRanges.put("Some Expression", a1);
expressionRanges.put("Other Expression", a2);                    

// Get 2D ArrayList from Map based on supplied Key string
ArrayList<ArrayList<Integer>> values =  expressionRanges.get("Other Expression");
// Display the contents of the 2D ArrayList
for(int i = 0; i < values.size(); i++){
    for(int j = 0; j < values.get(i).size(); j++){
        System.out.print(values.get(i).get(j) + "\t");
    }
    System.out.println();
}

如果运行它会在控制台窗口中显示以下内容:

6     5 
7     10    
8     15    
9     20    
10    25

推荐阅读