如何将HashTable值转换为2D数组

时间:2015-01-09 09:38:14

标签: java

package com.xchanging.selenium.utility;

import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;

import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel {

    public static void readExcel(String sheetName, String testCaseName)
            throws IOException {
        XSSFWorkbook sourceBook = new XSSFWorkbook("./TestCases.xlsx");
        XSSFSheet sourceSheet = sourceBook.getSheet(sheetName);
        int testCaseStartRow = 0;
        while (!sourceSheet.getRow(testCaseStartRow).getCell(0)
                .getRichStringCellValue().toString().equals(testCaseName)) {
            testCaseStartRow++;
        }
        System.out.println("testCaseStartingRow: " + testCaseStartRow);

        int testCaseStartColumn = 0;
        int headerRow = testCaseStartRow + 1;
        int keyRow = headerRow + 1;
        while (sourceSheet.getRow(headerRow).getCell(testCaseStartColumn) != null) {
            testCaseStartColumn++;
        }
        int lastColumn = testCaseStartColumn - 1;
        System.out.println("Header Row: " + headerRow);
        System.out.println("Key Row: " + keyRow);
        int parameters = lastColumn + 1;
        System.out.println("NO. of Parameters: " + parameters);
        Hashtable<String, String> table = new Hashtable<String, String>();
        Object[][] testData = new Object[0][lastColumn];
        for (int j = 0; j <= lastColumn; j++) {
            int cellType = sourceSheet.getRow(keyRow).getCell(j).getCellType();
            if (cellType == 0) {
                String key = sourceSheet.getRow(headerRow).getCell(j)
                        .toString();
                String value = Double.toString(sourceSheet.getRow(keyRow)
                        .getCell(j).getNumericCellValue());
                table.put(key, value);
            } else if (cellType == 1) {
                String key = sourceSheet.getRow(headerRow).getCell(j)
                        .toString();
                String value = sourceSheet.getRow(keyRow).getCell(j).toString();
                table.put(key, value);

            } else if (cellType == 2) {
                String key = sourceSheet.getRow(headerRow).getCell(j)
                        .toString();
                String value = sourceSheet.getRow(keyRow).getCell(j)
                        .getRawValue().toString();
                table.put(key, value);

            } else if (cellType == 4) {
                String key = sourceSheet.getRow(headerRow).getCell(j)
                        .toString();
                String value = Boolean.toString(sourceSheet.getRow(keyRow)
                        .getCell(j).getBooleanCellValue());
                table.put(key, value);

            } else {
                String key = sourceSheet.getRow(headerRow).getCell(j)
                        .toString();
                String value = "";
                table.put(key, value);
            }

        }
    }
}

我已将Excel工作表参数和值存储到HashTable中。我可以将其更改为2D数组并且能够通过键来加入值吗?

我需要更改2D数组的原因是,TestNG仅支持2D数组对象。

3 个答案:

答案 0 :(得分:0)

一种简单的方法是迭代值:

public static<T,Q> Object[][] toArray (Map<T,Q> map) {
    if(map == null) {
        return null;
    }
    Object[][] result = new Object[map.size()][];
    int index = 0;
    for(Map.Entry<T,Q> e : map.entrySet()) {
        result[index++] = new Object[] {e.getKey(),e.getValue()};
    }
    return result;
}

jdoodle演示了一个测试用例。

答案 1 :(得分:0)

如果我理解正确,下面的样本就是你;

Hashtable<String, String> map = new Hashtable();
    map.put("A", "B");
    map.put("C", "D");
    Object[][] arr = new Object[map.size()][2];
    Set entries = map.entrySet();
    Iterator entriesIterator = entries.iterator();

    int i = 0;

    while (entriesIterator.hasNext()) {

        Map.Entry mapping = (Map.Entry) entriesIterator.next();

        arr[i][0] = mapping.getKey();
        arr[i][1] = mapping.getValue();

        i++;
    }

答案 2 :(得分:0)

您可以使用Java 8中的流相当整齐地执行此操作:

    String[][] arrays = new String[map.size()][2];
    arrays = map.entrySet().stream().map(entry -> {
        String[] row = {entry.getKey(), entry.getValue()};
        return row;
    }).collect(Collectors.toList()).toArray(arrays);
相关问题