The task is to read the given file and return list of full names. I've separated the lines successfully and should be able to get both first and last names, but I'm a bit confused about how should I do that.
How am I able to get full names from readData()?
What I'm looking for is this output ["Alice Smith", "Bob Brown", "Carol White", "David Doe"] and not duplicated names.
My code looks like this so far:
public class GradeRepository {
public GradeRepository(){
readData();
}
public void readData() {
for (String line : readLines()) {
String[] parts = line.split("\\|");
String firstName = parts[0];
String lastName = parts[1];
String subject = parts[2];
String grade = parts[3];
System.out.println(firstName);
System.out.println(lastName);
System.out.println(subject);
System.out.println(grade);
System.out.println(Arrays.toString(parts));
}
}
public List<String> getFullNames() {
List<String> fullNames = new ArrayList<>();
return fullNames;
}
private List<String> readLines() {
try {
return Files.readAllLines(Paths.get("src/ex1/grades.txt"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Given text file: grades.txt
Alice|Smith|math|5
Bob|Brown|english|4
David|Doe|math|3
Bob|Brown|math|4
Bob|Brown|chemistry|5
Alice|Smith|english|4
Carol|White|chemistry|3
David|Doe|chemistry|4
readDataneeds to be modified either to return a list ofString[]where each string array represents a line or a fieldList<String[]> dataneeds to be created inGradeRepositoryand populated inreadData.Next, to get rid of duplicate names a
Set<String>should be used as suggested in the comments, andLinkedHashSetimplementation allows to keep the insertion order.Example implementation where
readDatareturns a list:It may be more preferable to use Stream API to avoid creation of intermediate collections, so all these methods may be rewritten into one: