Convertir ArrayList vers TreeMap
ng73800
Messages postés
17
Statut
Membre
-
ng73800 Messages postés 17 Statut Membre -
ng73800 Messages postés 17 Statut Membre -
Bonjour,
j'ai un petit soucis de compréhension, je vais mettre le code ici et tenter d'expliquer mon problème.
J'ai une première classe, ReadSymptomFromDataFile :
Cette classe sert à lire un fichier txt qui contient une liste de symptômes, avec plusieurs fois le même symptômes à l'intérieur, d'ou l'intéret de la TreeMap, un symptôme associé au nombre de fois ou il apparaît. (Value, Key)
Jusque là tout va bien.
Ensuite, j'ai ce code que j'ai fait moi mais qui se passe de la classe ReadSymptomData :
Ce code fait la même chose à peu près, elle lis un fichier txt, l'enregistre dans une TreeMap, l'affiche sur la console et l'enregistre dans un fichier resultat.out
Maintenant mon problème, c'est que j'essaye de découper mon code en plusieurs classes tout en utilisant la classe déjà existante ReadSymptomData, une classe pour lire le fichier texte, une autre pour convertir tout ça en TreeMap, une autre classe pour écrire les résultats dans un fichier de sortie, et une dernière pour la gestion des exceptions.
J'ai commencé avec cette classe FileToTreeMap, mais c'est moche, c'est pas propre, et je suis sûr qu'il est possible de faire mieux pour convertir mon objet ReadSymptomDataFromFile vers une TreeMap :
Voilà, je suis un peu perdu dans la découpe de mon code, et le principal problème que j'ai, c'est de convertir mon ArrayList vers une TreeMap.
Désolé pour la longueur du poste, mais j'apprécierait toute l'aide que l'on m'apporte, merci d'avance.
j'ai un petit soucis de compréhension, je vais mettre le code ici et tenter d'expliquer mon problème.
J'ai une première classe, 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;
}
}
Cette classe sert à lire un fichier txt qui contient une liste de symptômes, avec plusieurs fois le même symptômes à l'intérieur, d'ou l'intéret de la TreeMap, un symptôme associé au nombre de fois ou il apparaît. (Value, Key)
Jusque là tout va bien.
Ensuite, j'ai ce code que j'ai fait moi mais qui se passe de la classe 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");
}
}
}
Ce code fait la même chose à peu près, elle lis un fichier txt, l'enregistre dans une TreeMap, l'affiche sur la console et l'enregistre dans un fichier resultat.out
Maintenant mon problème, c'est que j'essaye de découper mon code en plusieurs classes tout en utilisant la classe déjà existante ReadSymptomData, une classe pour lire le fichier texte, une autre pour convertir tout ça en TreeMap, une autre classe pour écrire les résultats dans un fichier de sortie, et une dernière pour la gestion des exceptions.
J'ai commencé avec cette classe FileToTreeMap, mais c'est moche, c'est pas propre, et je suis sûr qu'il est possible de faire mieux pour convertir mon objet ReadSymptomDataFromFile vers une 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;
}
}
Voilà, je suis un peu perdu dans la découpe de mon code, et le principal problème que j'ai, c'est de convertir mon ArrayList vers une TreeMap.
Désolé pour la longueur du poste, mais j'apprécierait toute l'aide que l'on m'apporte, merci d'avance.
A voir également:
- Convertir ArrayList vers TreeMap
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Convertir epub en kindle - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Qwerty vers azerty - Guide
- Convertir kindle en epub - Guide
2 réponses
Bonjour,
"Désolé pour la longueur du poste"
Aucun problème, s'il pouvait être tous aussi détaillé le forum serait bien plus agréable à lire :-)
"Voilà, je suis un peu perdu dans la découpe de mon code"
Tout d'abord il semble que la notion d'objet ne soit pas bien comprise, que ce soit "FileToTreeMap" ou "ReadSymptomDataFromFile", on est plutôt sur un nommage de méthodes, pas de classe.
S'il devait y avoir un objet ici, ce serait Symptom. Certes le fait qu'il soit assimilable à un String pourrait rendre la classe superflue, mais il n'empêche que pour ta conception de code et la manière de la découper c'est autour de la notion de Symptom que les classes devraient graviter, pas autour des File ou des Map qui les manipulent.
Pour reprendre la structure de l'interface ISymptomReader, je te suggère de créer la classe SymptomReader et d'y placer toutes les méthodes de lecture de Symptom, que ce soit celles te donnant une List ou celles te donnant une Map.
Par exemple :
"Désolé pour la longueur du poste"
Aucun problème, s'il pouvait être tous aussi détaillé le forum serait bien plus agréable à lire :-)
"Voilà, je suis un peu perdu dans la découpe de mon code"
Tout d'abord il semble que la notion d'objet ne soit pas bien comprise, que ce soit "FileToTreeMap" ou "ReadSymptomDataFromFile", on est plutôt sur un nommage de méthodes, pas de classe.
S'il devait y avoir un objet ici, ce serait Symptom. Certes le fait qu'il soit assimilable à un String pourrait rendre la classe superflue, mais il n'empêche que pour ta conception de code et la manière de la découper c'est autour de la notion de Symptom que les classes devraient graviter, pas autour des File ou des Map qui les manipulent.
Pour reprendre la structure de l'interface ISymptomReader, je te suggère de créer la classe SymptomReader et d'y placer toutes les méthodes de lecture de Symptom, que ce soit celles te donnant une List ou celles te donnant une Map.
Par exemple :
package com.hemebiotech.analytics;
import java.io.*;
import java.nio.file.*;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
public class SymptomReader implements ISymptomReader {
private final Path path;
public SymptomReader(String filePath) {
path = Paths.get(filePath);
}
@Override
public List<String> getSymptoms(){
try {
return Files.readAllLines(path);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
public Map<String, Long> getSymptomsCount(){
try {
return Files.lines(path).collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
public static void main(String[] args) {
SymptomReader reader = new SymptomReader("D:/symptoms.txt");
System.out.println(reader.getSymptoms());
System.out.println(reader.getSymptomsCount());
}
}