protected void decompressData(ArrayList arr) {

        HashMap fstData = null; // The first data record (Map type)
        HashMap cprData;        // The following data record which will be compressed
        for (Object sub : arr) {
            if (sub instanceof ArrayList) {
                // iterate sub array nodes
                decompressData((ArrayList) sub);
            } else if (sub instanceof HashMap) {
                // iterate sub data nodes
                decompressData((HashMap) sub);
                // Compress data for current array
                if (fstData == null) {
                    // Get first data node
                    fstData = (HashMap) sub;
                } else {
                    cprData = (HashMap) sub;
                    // The omitted data will be recovered to the following map; Only data item (String type) will be processed
                    for (Object key : fstData.keySet()) {
                        if (!cprData.containsKey(key)) {
                            cprData.put(key, fstData.get(key));
                        }
                    }
                }
            } else {
            }
        }
    }
protected void decompressData ( ArrayList arr ) { HashMap fstData = null ; HashMap cprData ; for ( Object sub : arr ) { if ( sub instanceof ArrayList ) { decompressData ( ( ArrayList ) sub ) ; } else if ( sub instanceof HashMap ) { decompressData ( ( HashMap ) sub ) ; if ( fstData == null ) { fstData = ( HashMap ) sub ; } else { cprData = ( HashMap ) sub ; for ( Object key : fstData . keySet ( ) ) { if ( ! cprData . containsKey ( key ) ) { cprData . put ( key , fstData . get ( key ) ) ; } } } } else { } } }
decompress the data in an ArrayList object

@param arr input ArrayList