0
votes

Comment trier les données par date en Java avant de stocker dans un tableau d'objet ou de la liste contenant une matrice d'objet [CanNe-poste? N'importe quel indice ..?

Je reçois trois sous-chaînes différentes de l'ID de fichier, le nom de la société et la date

Lors de la récupération, je dois stocker des valeurs de date à l'objet. p>

J'ai récupéré et converti une chaîne en format de date J'ai besoin et stocké. Au lieu de tirer à nouveau chaque fois à l'aide de la tri SQL, essayez de stocker trié par des dates avant d'insérer. p> xxx pré>

entrée d'échantillon et sortie respective ajoutée ci-dessous P>

06/01/2013 04:03.36 AM U753838 Target=<DOW>
06/01/2013 07:06.42 AM U640630 Target=<DOW>
06/01/2013 12:02.42 AM U090521 Target=<DOW>


22 commentaires

tout échantillon de données, si vous voulez s'il vous plaît


Sûr @sagarkharab


@Sagarkharab J'ai fait édité et ajouté des données d'échantillon d'E / S, merci


Oops..!! une idée.?


J'essaie un programme. Je posterai une fois prêt.


ok moi aussi essayer si je peux utiliser la carte ou le comparateur


Stackoverflow.com/Questtions/144451976/... Cela devrait vous aider! Sinon, laissez-moi savoir. J'ai écrit du code.


Cela est utile tout en triant une colonne que je suppose, mais en triant que les deux autres colonnes doivent commander en conséquence à ce jour, c'est là que je me débats où commencer comme ça, je pense encore et encore.


Reportez-vous à ma solution si j'ai eu votre problème correct.


Je ne suis pas en mesure d'exécuter votre code, il affiche de nombreuses erreurs Construction égarée et de nombreuses variables me forçant à créer une classe pour cela, pour que je puisse avoir des packages importés, ne vous laissez pas suivre et corriger bro


Vous avez utilisé beaucoup de nouvelles choses quelle version il appartient à je suis nouveau à Java


Fyi, les anciennes classes de date-heure terriblement gênantes telles que java.util.date , java.util.calendar et java.text.simpledeformat sont maintenant Legacy , supplanté par le java.time cours de classe intégrée à Java 8 et plus tard. Voir Tutoriel par Oracle .


Je vous recommande d'utiliser SimpleDateformat et date . Ces classes sont mal conçues et longtemps obsolètes, le premier en particulier notoirement gênant. Au lieu de cela, utilisez localTime et DateTimeformatter , à partir de Java.time, l'API et l'heure de l'heure de Java modernes .


Est-ce une tentative mal comprise à l'optimisation? SQL est idéal pour le tri. Jusqu'à ce que vous ayez déterminé que son tri prenait trop de temps, vous devriez le laisser.


Connexe (mais différent): Comment Comment Obtenez chaque chronique des valeurs de la colonne à partir d'une matrice d'objet stockée dans la liste [duplicate]


Dans le lien, vous avez ajouté ma même question que Duplicate pourquoi @ OLEV.V. S'il vous plaît vérifier avant de marquer comme dupliquer


Désolé si j'étais peu clair. J'ai dit "mais différent" exactement pour dire que c'est pas un duplicata. Je pensais juste qu'avoir l'arrière-plan dans votre autre question pourrait être gentil pour certains. J'étais complètement conscient que les deux questions étaient à vous.


désolé @ olev.v. J'aurais inclus dans cette question elle-même mais demandant aux questions de la matchle dans la même post ne serait pas claire pour beaucoup, c'est la raison pour laquelle j'ai soulevé une nouvelle question. Laissez-le comme, avez-vous une idée de la façon de le trier ..? vraiment apprécier pour cité.


Tout indice comment y parvenir ..?


Je n'ai pas vu ça. C'est exactement la même question, juste sans réponse acceptée.


Vos exigences ne sont-elles pas claires pour moi, avez-vous besoin de trier les chaînes dans la matrice ou les tableaux dans la liste? Après les commentaires à la réponse, il n'est également pas clair si le problème réel est de savoir comment activer les fonctionnalités Java 8 dans votre éclipse.


OUI @ OLEV.V. Nous sommes dans le même projet essayant de le réparer


3 Réponses :


0
votes

S'il vous plaît essayez ceci pour une fois. Devrait faire l'acte.

public class FileWriter {
    public static void main(String[] args) throws Exception{
        try {
            BufferedReader br = new BufferedReader(new FileReader
                    (new File("Path of sample Data")));
            List<String> list = new ArrayList<>();
            br.lines().forEach(s -> {
                System.out.println(s);
                Arrays.stream(s.split("\\)")).skip(1).forEach(s1 -> {
                    String[] strArr = s1.split("-->");
                    String p2 = s1.split("=<")[1].split(">")[0];
                    String p3 = s1.split("Password")[1].trim();
                    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm.ss.SSS");
                    list.add(strArr[0].trim() + " " + p2 + " " + p3);
                    Collections.sort(list, (d1, d2) -> {
                        try{
                            return sdf.parse(d1.substring(0, 21)).compareTo(sdf.parse(d2.substring(0, 21)));
                        }
                        catch (ParseException e) {
                            e.printStackTrace();
                        }
                        return 0;
                    });
                });
            });
            list.stream().forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


9 commentaires

Je ne suis pas en mesure d'exécuter votre code. Il affiche de nombreuses erreurs Constructionnées mal placées où que vous utilisiez des expressions Lamda, et de nombreuses variables me forcent à créer de la classe pour cet exemple S, S1, D1, D2, pour quelques packages importés. suivre et corriger Bro


N'utilisez-vous pas Java 8 ??


java version "1.8.0_201" C'est la version que j'utilise


En version Eclipse Compiler indique 1,7


Compiler et courir avec Java 8 s'il vous plaît


L'option 1.8 non disponible pour sélectionner BRO, mon mauvais


Vous devriez le google. Vous pouvez trouver comment définir le niveau du compilateur sur 1.8, puis compiler le code. Faire des recherches autour.


Je ne suis pas capable de l'appliquer comme la version qui ne prend pas en charge, existe-t-il un autre indice que vous pouvez donner à appliquer de manière simple à l'aide de comparable ou de comparaison


Tout indice comment y parvenir ..?



0
votes

Un moyen facile est d'utiliser le format de date ISO comme celui-là:

2013-06-01 04:03.36.562 -->Successful password change for user=<U753838>, Password Target=<DOW>.
2013-06-01 07:18.42.312 -->Successful password change for user=<U640630>, Password Target=<DOW>.
2013-06-01 12:14.42.410 -->Successful password change for user=<U090521>, Password Target=<DOW>.


1 commentaires

Votre logique de tri fera seul pour la colonne de date à droite, mais ce que nous recherchons ici, c'est pendant que vous triez par date de date des chaînes respectives stockées dans un autre objet doit être triée, pour être exact si vous tirez des données de la commande DB par la valeur de champ. Trier la table entière et produire une sortie de même en essayant.



0
votes
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class ReadingFile {
    public static String input_path = ("D:\\Aritra\\inputs");
    public static String output_path = ("D:\\Aritra\\outputs");
    static BufferedReader br;

    void read() {
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm.ss");
        SimpleDateFormat parsingSdf = new SimpleDateFormat("hh:mm.ss a");
        ArrayList<Object[]> list = new ArrayList<Object[]>();
        try {
            File fi = new File(input_path);
            File[] fileCount = fi.listFiles();
            for (int i = 0; i < fileCount.length; i++) {
                File file = fileCount[i];
                if (file.isFile()) {
                    System.out.println("Total file count : " + fileCount.length);
                    String fileName = file.getName();
                    System.out.println("File name : " + fileName);
                    String data;
                    br = new BufferedReader(new FileReader(input_path + "\\" + fileName));
                    while ((data = br.readLine()) != null) {
                        if (data.contains(">")) {
                            Object[] received = new Object[3];
                            String dat = data.substring(data.indexOf(" ") + 1, data.indexOf("-") - 1);
                            // System.out.println(dat);
                            Date date = sdf.parse(dat.substring(dat.indexOf(" "), dat.lastIndexOf(".")));
                            // System.out.println(date);
                            String timeFormat = parsingSdf.format(date);
                            // System.out.println(timeFormat);
                            received[0] = dat.substring(dat.indexOf("0"), dat.indexOf(" ") + 1) + timeFormat;
                            // System.out.println(received[0]);
                            received[1] = data.substring(data.indexOf("<") + 1, data.indexOf(",") - 1);
                            // System.out.println(received[1]);
                            received[2] = data.substring(data.indexOf("Target"), data.lastIndexOf("."));
                            // System.out.println(received[2]);
                            //list.add(received);
                            boolean isAdded = false;

                            if (!list.isEmpty()) {
                                Date currentEntry = new SimpleDateFormat("dd/MM/yyyy hh:mm.ss a")
                                        .parse((String) received[0]);
                                int count = 0;
                                do {
                                    Object[] loopElement =  list.get(count);
                                    Date loopElementDate = new SimpleDateFormat("dd/MM/yyyy hh:mm.ss a")
                                            .parse((String) loopElement[0]);
                                    int compareResult = currentEntry.compareTo(loopElementDate);
                                    if(compareResult<=0) {
                                        list.add(count,received);
                                        isAdded = true;
                                        break;
                                    } 
                                    count++;
                                } while (count < list.size());

                            }
                            if(!isAdded) {
                                list.add(received);
                            }       
                        }
                    }
                }
            }
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("<<<<<<<<<<<<<< Result >>>>>>>>>>>>>>>>");
        for(Object[] l:list) {
            for(Object l1:l) {
                System.out.print("["+l1+"]");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        new ReadingFile().read();
    }
}

7 commentaires

Gardé votre code presque le même. Changé HH: MM.SS en HH: MM.SS et remplacé "List.Ajouté (reçu);" Avec le bloc supplémentaire, où un nouvel élément est comparé aux éléments existants et inséré en conséquence.


Il fonctionne vraiment parfaitement, de 12h à 4 heures du matin et ainsi de suite, c'est ce dont nous avons besoin, merci @artitra Kumar


Et pourquoi avez-vous remplacé les heures, les minutes et les secondes à tous les minuscules, je veux dire ce qui ne va pas pour garder la même chose, cela causerait tout problème dans le tri ..?


PLZ Votez pour ma question à upvote vos réponses, merci beaucoup ... !!


Capitale M est le mois. Petit m est minute.


Pourquoi avez-vous remplacé son déjà déclaré correct. Que fait la différence ..? @ Aritra Kumar


ne vous a pas compris de question. Demandez-vous pourquoi j'ai remplacé "List.Ajouté (reçu);"? En effet, au lieu d'insérer directement dans la liste, je les reçois par rapport à chaque élément. Je n'ai changé aucune déclaration. Vous pouvez essayer une comparaison de ligne par ligne pour une meilleure compréhension. Si vous demandez à propos de MM VS MM, que je vous ai déjà expliqué, vous pouvez faire référence à Java Doc pour cela.