У меня небольшая проблема с пониманием, я помещу здесь код и попытаюсь объяснить свою проблему.
У меня есть первый класс ReadSymptomFromDataFile:
package com.hemebiotech.analytics;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Simple brute force implementation
*
*/
public class ReadSymptomDataFromFile implements ISymptomReader {
private final String filepath;
/**
*
* @param filepath a full or partial path to file with symptom strings in it, one per line
*/
public ReadSymptomDataFromFile (String filepath) {
this.filepath = filepath;
}
@Override
public List<String> getSymptoms () {
ArrayList<String> result = new ArrayList<>();
if (filepath != null) {
try {
BufferedReader reader = new BufferedReader (new FileReader(filepath));
String line = reader.readLine();
while (line != null) {
result.add(line);
line = reader.readLine();
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
}
Этот класс используется для чтения текстового файла, который содержит список симптомов, внутри которых несколько раз одни и те же симптомы, отсюда и значение TreeMap, симптома, связанного с количеством его появлений. (Value, Key) Пока все хорошо.
Затем у меня есть этот код, который я сделал сам, но он происходит из класса ReadSymptomData:
package com.hemebiotech.analytics.Test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class MainAppTest2 {
public static void main (String[] args) {
try {
File file = new File ("Project02Eclipse\\symptoms.txt");
Scanner scan = new Scanner (file);
Map<String, Integer> wordCount = new TreeMap<> ();
while (scan.hasNext ()) {
String word = scan.next ();
if (!wordCount.containsKey (word)) {
wordCount.put (word, 1);
} else {
wordCount.put (word, wordCount.get (word) + 1);
}
}
// Result in console & Write file output
FileWriter writer = new FileWriter ("resultat2.out");
BufferedWriter out = new BufferedWriter (writer);
for (Map.Entry<String, Integer> entry : wordCount.entrySet ()) {
System.out.println ("Valeur: " + entry.getKey () + "| Occurence: " + entry.getValue ());
out.write (entry.getKey () + " = " + entry.getValue () + " \n");
out.flush (); // Force write
}
} catch (IOException e) {
System.out.println ("Fichier introuvable");
}
}
}
Этот код делает то же самое, он читает текстовый файл, сохраняет его в TreeMap, отображает на консоли и сохраняет в файле resultat.
Теперь моя проблема в том, что я пытаюсь разбить свой код на несколько классов, используя уже существующий класс ReadSymptomData, один класс для чтения текстового файла, другой для преобразования всего этого в TreeMap, другой класс для записи результатов в выходной файл и последний класс для обработки исключений.
Я начал с этой FileToTreeMap class, но он уродлив, он не чистый, и я уверен, что можно было бы лучше преобразовать мой объект ReadSymptomDataFromFile в TreeMap:
package com.hemebiotech.analytics.Test.read;
import com.hemebiotech.analytics.ReadSymptomDataFromFile;
import java.util.*;
public class FileToTreeMap {
// Read file
public Map<String, Integer> readFile () {
ReadSymptomDataFromFile list = new ReadSymptomDataFromFile ("Project02Eclipse\\symptoms.txt");
Map<String, Integer> listSort = new TreeMap<> ();
ArrayList<String> test = new ArrayList<> (list.getSymptoms ());
Scanner scan = new Scanner (String.valueOf (test));
while (scan.hasNext ()) {
String word = scan.next ();
if (!listSort.containsKey (word)) {
listSort.put (word, 1);
} else {
listSort.put (word, listSort.get (word) + 1);
}
}
for (Map.Entry<String, Integer> entry : listSort.entrySet ()) {
System.out.println ("Valeur: " + entry.getKey () + " Occurence: " + entry.getValue ());
}
return listSort;
}
}
Здесь я немного заблудился в сокращении своего кода, и основная моя проблема - преобразовать мой ArrayList в TreeMap.
Извините за длину сообщения, но я был бы признателен за любую помощь, которую я получаю, спасибо в аванс.