public static Map<String, Map<String, Field>> rowListToMap(List<Row> rowList, List<String> primaryKeyList) {
        // {value of primaryKey, value of all columns}
        Map<String, Map<String, Field>> rowMap = new HashMap<>();
        for (Row row : rowList) {
            //ensure the order of column
            List<Field> rowFieldList = row.getFields().stream()
                    .sorted(Comparator.comparing(Field::getName))
                    .collect(Collectors.toList());
            // {uppercase fieldName : field}
            Map<String, Field> colsMap = new HashMap<>();
            StringBuilder rowKey = new StringBuilder();
            boolean firstUnderline = false;
            for (int j = 0; j < rowFieldList.size(); j++) {
                Field field = rowFieldList.get(j);
                if (primaryKeyList.stream().anyMatch(e -> field.getName().equals(e))) {
                    if (firstUnderline && j > 0) {
                        rowKey.append("_");
                    }
                    rowKey.append(String.valueOf(field.getValue()));
                    firstUnderline = true;
                }
                colsMap.put(field.getName().trim().toUpperCase(), field);
            }
            rowMap.put(rowKey.toString(), colsMap);
        }
        return rowMap;
    }
@Test
    public void testRowListToMapWithSinglePk(){
        List<String> primaryKeyList = new ArrayList<>();
        primaryKeyList.add("id");

        List<Row> rows = new ArrayList<>();
        Field field = new Field("id", 1, "1");
        Row row = new Row();
        row.add(field);
        rows.add(row);

        Field field2 = new Field("id", 1, "2");
        Row row2 = new Row();
        row2.add(field2);
        rows.add(row2);

        Field field3 = new Field("id", 1, "3");
        Row row3 = new Row();
        row3.add(field3);
        rows.add(row3);

        Map<String, Map<String, Field>> result =DataCompareUtils.rowListToMap(rows,primaryKeyList);
        Assertions.assertEquals(3, result.size());
        Assertions.assertEquals(result.keySet().iterator().next(),"1");

    }