import java.util.*;
class LegacyGlueifier
{
public static void main
(String[] args
) {
HashMap
<String, String
> derp
= new HashMap
<String, String
>(); derp.put("key1", "1,2,3,4");
derp.put("key2", "5,6");
derp.put("key3", "7,8,9,A");
System.
out.
println(generateLegacyDataset
(derp
)); }
private LegacyGlueifier()
{
}
public static String generateLegacyDataset
(Map
<String, String
> data
) {
final ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
final int width = data.size();
int i = 0;
for (Map.
Entry<String, String
> entry
: data.
entrySet()) {
String[] values
= entry.
getValue().
split(","); changeDims(lists, width, values.length + 1);
for (int j = 0; j < values.length; ++j) setValue(lists, j + 1, i, values[j]);
setValue(lists, 0, i, entry.getKey());
++i;
}
return stringify(lists);
}
private static void changeDims(ArrayList<ArrayList<String>> lists, int width, int newHeight)
{
while (lists.size() < newHeight) lists.add(arrayListOfSize(width));
}
private static ArrayList<String> arrayListOfSize(int w)
{
ArrayList<String> list = new ArrayList<String>(w);
while (list.size() < w) list.add(null);
return list;
}
private static void setValue
(ArrayList
<ArrayList
<String
>> lists,
int row,
int col,
String val
) {
ArrayList<String> temp = lists.get(row);
temp.set(col, val);
// System.out.println("SET: " + row + " " + col + ": " + val);
}
{
if (s == null) return "";
return s;
}
private static String stringify
(ArrayList
<ArrayList
<String
>> lists
) {
StringBuilder sb = new StringBuilder();
for (ArrayList<String> sublist : lists)
{
if (sublist.size() != 0) sb.append(swapNullWithEmpty(sublist.get(0)));
for (int i = 1; i < sublist.size(); ++i)
sb.append("|").append(swapNullWithEmpty(sublist.get(i)));
sb.append("\n");
}
return sb.toString();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKICAgIGNsYXNzIExlZ2FjeUdsdWVpZmllcgogICAgewogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgewogICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkZXJwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICAgICAgICAgIGRlcnAucHV0KCJrZXkxIiwgIjEsMiwzLDQiKTsKICAgICAgICAgICAgZGVycC5wdXQoImtleTIiLCAiNSw2Iik7CiAgICAgICAgICAgIGRlcnAucHV0KCJrZXkzIiwgIjcsOCw5LEEiKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdlbmVyYXRlTGVnYWN5RGF0YXNldChkZXJwKSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHByaXZhdGUgTGVnYWN5R2x1ZWlmaWVyKCkKICAgICAgICB7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZW5lcmF0ZUxlZ2FjeURhdGFzZXQoTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhKQogICAgICAgIHsKICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PEFycmF5TGlzdDxTdHJpbmc+PiBsaXN0cyA9IG5ldyBBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+KCk7CiAgICAgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IGRhdGEuc2l6ZSgpOwoKICAgICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBkYXRhLmVudHJ5U2V0KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IGVudHJ5LmdldFZhbHVlKCkuc3BsaXQoIiwiKTsKICAgICAgICAgICAgICAgIGNoYW5nZURpbXMobGlzdHMsIHdpZHRoLCB2YWx1ZXMubGVuZ3RoICsgMSk7CgogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2YWx1ZXMubGVuZ3RoOyArK2opIHNldFZhbHVlKGxpc3RzLCBqICsgMSwgaSwgdmFsdWVzW2pdKTsKICAgICAgICAgICAgICAgIHNldFZhbHVlKGxpc3RzLCAwLCBpLCBlbnRyeS5nZXRLZXkoKSk7CiAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzdHJpbmdpZnkobGlzdHMpOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGFuZ2VEaW1zKEFycmF5TGlzdDxBcnJheUxpc3Q8U3RyaW5nPj4gbGlzdHMsIGludCB3aWR0aCwgaW50IG5ld0hlaWdodCkKICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlIChsaXN0cy5zaXplKCkgPCBuZXdIZWlnaHQpIGxpc3RzLmFkZChhcnJheUxpc3RPZlNpemUod2lkdGgpKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0PFN0cmluZz4gYXJyYXlMaXN0T2ZTaXplKGludCB3KQogICAgICAgIHsKICAgICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPih3KTsKICAgICAgICAgICAgd2hpbGUgKGxpc3Quc2l6ZSgpIDwgdykgbGlzdC5hZGQobnVsbCk7CiAgICAgICAgICAgIHJldHVybiBsaXN0OwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRWYWx1ZShBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+IGxpc3RzLCBpbnQgcm93LCBpbnQgY29sLCBTdHJpbmcgdmFsKQogICAgICAgIHsKICAgICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gdGVtcCA9IGxpc3RzLmdldChyb3cpOwogICAgICAgICAgICB0ZW1wLnNldChjb2wsIHZhbCk7CiAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiU0VUOiAiICsgcm93ICsgIiAiICsgY29sICsgIjogIiArIHZhbCk7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3dhcE51bGxXaXRoRW1wdHkoU3RyaW5nIHMpCiAgICAgICAgewogICAgICAgICAgICBpZiAocyA9PSBudWxsKSByZXR1cm4gIiI7CiAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0cmluZ2lmeShBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+IGxpc3RzKQogICAgICAgIHsKICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgICAgIGZvciAoQXJyYXlMaXN0PFN0cmluZz4gc3VibGlzdCA6IGxpc3RzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoc3VibGlzdC5zaXplKCkgIT0gMCkgc2IuYXBwZW5kKHN3YXBOdWxsV2l0aEVtcHR5KHN1Ymxpc3QuZ2V0KDApKSk7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHN1Ymxpc3Quc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJ8IikuYXBwZW5kKHN3YXBOdWxsV2l0aEVtcHR5KHN1Ymxpc3QuZ2V0KGkpKSk7CiAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgICAgIH0KICAgIH0=