distinct
yang mana secara kasar bisa dikatakan bahwa perintah ini menggunakan hashmap dalam implementasinya. Saya berikan contoh, adalah bagaimana mencari dalam suatu file pada baris ke berapa saja kolom ke-x mengalami duplikasi. Sebenarnya ini perluasan dari pertanyaan fundamental yakni, apakah suatu data memiliki jumlah lebih dari satu dalam suatu kumpulan data. Kemudian saya melakukan perluasan dengan memberikan jawaban mengenai di baris mana saja data tersebut mengalami duplikasi. Potongan kodenya dapat dilihat pada script berikut:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// untuk memeriksa data pada kolom ke-x yang mengalami duplikasi | |
static void checkUnik(BufferedReader reader, BufferedWriter writer ) throws IOException { | |
HashMap<String, Integer> map = new HashMap<String, Integer>() ; | |
HashMap< String, ArrayList<Integer>> listMap = new HashMap<>(); | |
HashMap<Integer, String[]> lineMap = new HashMap<Integer, String[]>(); | |
String result; | |
int numberLine = 1; | |
while((result = reader.readLine()) != null){ | |
String[] splitter = result.split(regexSplitter); | |
String search_string = splitter[6]; | |
if(map.get(search_string) == null ){ | |
map.put(search_string, 1); | |
ArrayList<Integer> listInteger = new ArrayList<>(); | |
listInteger.add(numberLine); | |
listMap.put(search_string , listInteger ); | |
}else{ | |
int jumlah = map.get(search_string); | |
map.replace(search_string, ++jumlah); | |
ArrayList<Integer> list = listMap.get(search_string); | |
list.add(numberLine); | |
} | |
lineMap.put(numberLine, splitter); | |
numberLine++; | |
} | |
// untuk mengecek apakah data pada kolom ke-x terduplikasi | |
writer.write("untuk mengecek apakah id yang bersangkutan terduplikasi\n"); | |
for(Entry<String, Integer> entri : map.entrySet()){ | |
if(entri.getValue() > 1){ | |
String output = "key: "+ entri.getKey() + " value: "+ entri.getValue() + "\n" ; | |
writer.write(output); | |
} | |
} | |
// untuk mengecek (karena terduplikasi) di baris mana saja data (kolom ke-x) tersebut berada... | |
writer.write("\nuntuk mengecek ada dibagian mana saja id tersebut berada...\n"); | |
for(Entry<String, ArrayList<Integer>> entri : listMap.entrySet()){ | |
ArrayList<Integer> list = entri.getValue(); | |
if(list.size() > 1){ | |
String output = "Key: "+ entri.getKey() + " ada pada baris:\t"; | |
for( Integer line : list){ | |
output += line + "\t"; | |
} | |
output+= "\n"; | |
writer.write(output); | |
} | |
} | |
// untuk memeriksa situasi baris di mana data kolom ke-x terduplikasi | |
writer.write("\nmemeriksa situasi baris yang terduplikas\n"); | |
for(Entry<String, ArrayList<Integer>> entri : listMap.entrySet() ){ | |
ArrayList<Integer> list = entri.getValue(); | |
if(list.size() > 1){ | |
for(Integer line: list){ | |
String[] ss = lineMap.get(line); | |
String out = entri.getKey()+ "\t" + Integer.toString(line)+":\t"; | |
for(String s: ss){ | |
out += s + "\t"; | |
} | |
out += "\n"; | |
writer.write(out); | |
} | |
} | |
} | |
// untuk mencari tahu apakah pada baris di mana data kolom ke-x terduplikasi | |
// masih ada data untuk kolom yang lain selain kolom ke-x yang terduplikasi | |
writer.write("\nuntuk mencari tahu apakah di dalam entri yang terduplikasi masih ada duplikasi yang lain\n"); | |
for(Entry<String, ArrayList<Integer>> entri: listMap.entrySet()){ | |
ArrayList<Integer> list = entri.getValue(); | |
if ( list.size() > 1){ | |
HashMap<String, ArrayList<Integer>> secondMap = new HashMap<>(); | |
for(Integer line : list){ | |
String[] splitter = lineMap.get(line); | |
String search_string_second = splitter[0]; | |
if(secondMap.get(search_string_second) == null){ | |
ArrayList<Integer> listInteger = new ArrayList<>(); | |
listInteger.add(line); | |
secondMap.put(search_string_second, listInteger ); | |
}else{ | |
ArrayList<Integer> list_3 = secondMap.get(search_string_second); | |
list_3.add(line); | |
} | |
} | |
for(Entry<String, ArrayList<Integer>> entri_2 : secondMap.entrySet()){ | |
if(entri_2.getValue().size() > 1){ | |
String s = entri.getKey() + ":\t" + entri_2.getKey() + ":\t"; | |
for(Integer line_1 : entri_2.getValue()){ | |
s+= line_1 + "\t"; | |
} | |
s+= "\n"; | |
writer.write(s); | |
} | |
} | |
} | |
} | |
} |