0
votes

Comment obtenir des valeurs max et min du fichier CSV en Java

Voici mon fichier CSV: marks.csv et il contient avec le numéro d'étudiant à gauche et les marques à droite: xxx

J'ai besoin de pouvoir rechercher dans ce fichier et trouver la marque maximale et la marque minimale. J'ai ce code qui renvoie les valeurs mais je ne sais pas quoi faire après: xxx

et cela renvoie ce qui suit: xxx

Que puis-je essayer ensuite?


1 commentaires

Stockez les valeurs les plus basses et les plus élevées dans un VaR et comparez chaque valeur au fur et à mesure de son lecture, remplacez la valeur stockée selon le cas.


4 Réponses :


1
votes
public static void MaxAndMin()
                {
                    // .csv files are comma separated
                    String fileName = "src\\data\\marks.csv";
                    File file = new File(fileName);
                    TreeSet<Integer> ts1 = new TreeSet<Integer>(); 
                    try 
                    {
                        Scanner inputStream = new Scanner(file);

                        while(inputStream.hasNext())
                        {
                            String data = inputStream.next();
                            String [] values = data.split(",");
                            int mark = Integer.parseInt(values[1]);
                            ts1.add(mark);     
                        }


                        inputStream.close();

                        System.out.println("Min Marks"+ts1.first());
                        System.out.println("Max Marks"+ts1.last());
                    } 
                    catch (FileNotFoundException ex) 
                    {
                        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
You can store values in Treeset and then fetch first and last element.
Treeset stores element in sorted order.

0 commentaires

0
votes

Vous êtes sur la bonne voie en lisant les lignes du fichier et fractionnez chaque ligne par le séparateur (virgule dans votre locale).

Pour trouver la valeur maximale, vous avez plusieurs possibilités. Un simple serait un attribut de classe, disons privé int maxvalue = -1; que vous pouvez utiliser pour stocker le maximum actuel de votre boucle. Vérifiez si maxvalue est inférieur à la valeur actuelle ( marque dans votre code) et si oui, définissez maxvalue = marquage; . .

Vous pouvez également stocker toutes les valeurs d'une structure de données pour les primitives et String s ou faire des objets d'une classe personnalisée appropriée et stocker ceux dans une liste , par exemple . Ensuite, itérale la structure après ou utilisez l'API de flux à jour. Un petit exemple est-ce: xxx


0 commentaires

2
votes

Une réponse plus courte, plus claire et moins verbeuse à cela pourrait être la suivante:

private static void minAndMax() {
    try (Stream<String> stream = Files.lines(Paths.get(FILE_PATH))) {
        IntSummaryStatistics statistics = stream
            .map(s -> s.split(",")[1])
            .mapToInt(Integer::valueOf)
            .summaryStatistics();
        System.out.println("Lowest:: " + statistics.getMin());
        System.out.println("Highest:: " + statistics.getMax());
    } catch (IOException e) {
        e.printStackTrace();
    }
}


2 commentaires

Sympa, je n'avais jamais entendu parler de cette classe avant


C'est la joie de l'API de flux pour vous. Amples choses à travailler avec la plupart d'entre eux sous le radar.



0
votes

Vous pouvez faire quelque chose comme ça, gardez à l'esprit que j'ai utilisé des flux d'entiers dans Java 8 pour trouver le min et max de la liste:

    public static void maxAndMin() {
    // .csv files are comma separated
    String fileName = "src\\data\\marks.csv";
    File file = new File(fileName);

    try(Scanner inputStream = new Scanner(file)) {
        ArrayList<Integer> listNumbers = new ArrayList<>();

        while(inputStream.hasNext()) {
            String data = inputStream.next();
            listNumbers.add(Integer.valueOf(data.split(",")[1]));
        }

        int maxValue = listNumbers.stream().max(Comparator.comparing(Integer::valueOf)).get();
        int minValue = listNumbers.stream().min(Comparator.comparing(Integer::valueOf)).get();

        System.out.println("Max value is : "+maxValue);
        System.out.println("Min value is : "+minValue);
    }
    catch (FileNotFoundException ex)
    {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}


0 commentaires