I applied for Junior Java Developer in some company. Got a task:"Listing words (without duplicates) from text, provide lines where appears, count them." Output should looks like:
Alphacoronavirus - 3 - pozycje -> [1,3,2]
gatunki - 4 - pozycje -> [1,3,2,7]
Koronawirusy - 2 - pozycje -> [3,2]
Wirusów - 1 - pozycje -> [1]
Did not receive any feedback form them for two weeks so i will ask for judgment here. Waiting for roast
Data structure:
import java.util.ArrayList;
import java.util.List;
public class PatternStats implements Comparable<PatternStats>{
private String word;
private int amountOfAppearances = 1;
private List<Integer> linesContains = new ArrayList<>();
public PatternStats(String word){
this.word = word;
}
public String getWord() {
return word;
}
public int getAmountOfAppearances() {
return amountOfAppearances;
}
public List<Integer> getLinesContains() {
return linesContains;
}
public void increaseAOA(){
this.amountOfAppearances++;
}
public void addLineToList(int lineNO){
this.linesContains.add(lineNO);
}
@Override
public int compareTo(PatternStats o) {
int compareInt = this.word.toLowerCase().compareTo(o.word.toLowerCase());
if(compareInt < 0) return -1;
if(compareInt > 0) return 1;
return 0;
}
}
WordLister
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WordListingWithMap {
private Map<String, PatternStats> patternStatsMap = new HashMap<>();
public List<PatternStats> listWords(String filePath) {
patternStatsMap.clear();
String regex = "\\b[^\\d\\P{L}]+\\b";
try {
FileInputStream fis = new FileInputStream(filePath);
Scanner sc = new Scanner(fis);
scanTextCollectWords(sc, regex);
} catch (IOException e) {
e.printStackTrace();
}
List<PatternStats> patternStats = new ArrayList<>(patternStatsMap.values());
Collections.sort(patternStats);
return patternStats;
}
private void scanTextCollectWords(Scanner sc, String regex) {
int lineCounter = 0;
while (sc.hasNextLine()){
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sc.nextLine());
lineCounter++;
while (m.find()) {
if (patternStatsMap.containsKey(m.group(0))) {
increaseExist(m.group(0), lineCounter);
} else {
createNewAddToMap(m.group(0), lineCounter);
}
}
}
}
private void createNewAddToMap(String word, int line) {
PatternStats tempPatternStats = new PatternStats(word);
tempPatternStats.addLineToList(line);
patternStatsMap.put(word, tempPatternStats);
}
private void increaseExist(String word, int line) {
if (!patternStatsMap.get(word).getLinesContains().contains(line))
patternStatsMap.get(word).addLineToList(line);
patternStatsMap.get(word).increaseAOA();
}
}
and Main
import java.util.List;
public class Main {
public static void main(String[] args) {
final String filePatch = "C:\\vaTast\\src\\zadanie.txt";
WordListingWithMap wlwm = new WordListingWithMap();
toPrint = wlwm.listWords(filePatch);
for (PatternStats each : toPrint){
System.out.println(each.getWord() + " - " +
each.getAmountOfAppearances() + " - pozycje - > " +
each.getLinesContains());
}
}
}