关于排序:如何在Java中对与不同数据项对应的计数排序

How to sort the count obtained corresponding to different data items in java

我需要一个从多个文件中读取并根据用户输入的日期范围显示报告的程序。文件中的数据如下:

1
2
3
[C445] ComputerName:FRONTOFFICE UserID:YB Yenae Ball Station 7A  LanId: | (11/23 17:01:55) | Client is disconnected from agent.
[C445] ComputerName:FRONTOFFICE UserID:YB Yenae Ball Station 7C  LanId: | (11/23 17:02:00) | Client is connected to agent.
[C7AE] ComputerName:KCUTSHALL-PC UserID:GO kcutshall Station 9901  LanId: | (11/23 13:33:06 - 11/23 13:33:41)|Client is disconnected from agent.

我需要如下输出:

1
2
3
4
Computer Name   No.of disconnects
A                   4
B                   2
C                   1

即特定计算机名称的断开连接数,降序对应于输入的日期范围。我试过这样做,但我无法获得计算机的合并计数,也无法进行排序。我得到的输出是:

计算机名称断开的编号

1
2
3
4
5
6
7
A               1
A               1
A               2
B               1
B               2
C               1
C               1

请帮我一下。这是我写的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.Scanner;
import java.util.*;
import java.text.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class ReadZip{
    public static void main(String args[]) throws ParseException {
        try {
            Scanner input1=new Scanner(System.in);

            Scanner input2=new Scanner(System.in);
            System.out.println("Enter start date");
            String userDate1=input1.nextLine();
            System.out.println("Enter end date");
            String userDate2=input2.nextLine();
            DateFormat df = new SimpleDateFormat ("MM/dd");
            Date d1=df.parse(userDate1);
            Date d2=df.parse(userDate2);

            ZipFile zf=new ZipFile("C:\\Users\\Engineeir\\Desktop\\QoS_logs.zip");
            Enumeration entries=zf.entries();

            BufferedReader input=new BufferedReader(new InputStreamReader(
            System.in));
            while (entries.hasMoreElements()) {
                ZipEntry ze=(ZipEntry) entries.nextElement();

                BufferedReader br=new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
                String line; String name;String compnames;int lines=0;
                while ((line=br.readLine())!=null) {

                    String[] st=line.split("\\|",-1);

                    if(st.length>1){
                        String dates=st[1];
                        String[] parts=dates.split("-");
                        SimpleDateFormat f=new SimpleDateFormat("(MM/dd");
                        String[] ob=parts[0].split("");
                        String finaldate=ob[1];

                        Date d3=f.parse(finaldate);

                        if(d3.after(d1) && d3.before(d2)){
                            compnames=getName(st);
                            if(line.contains("Client is disconnected from agent")==true)
                            {
                                //compnames=getName(st);
                                lines++;
                            }
                        System.out.println(compnames+"\t"+lines);}
                        else{break;}
                        //System.out.println(compnames+"\t"+lines);

                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String getName(String[] st)
    {
        String[] name=st[0].split("\\:",-1);
        String[] comp=name[1].split("\",-1);

        return(comp[0]);
    }
}


不要一边打印一边在地图上累积数据(键:计算机名,值:断开的数目)。然后按地图键排序并打印最终总计。


尝试创建一个表示数据集的对象,创建这些数据集的列表以及一个Comparator并调用Collections.sort(list, comparator)

或者,将数据集放入像TreeMap这样的已排序集合中,并使用连接数作为键。

请注意,如果要合并多个文件的数据,则必须获取任何以前创建的数据集,并将新文件的数据合并到这些数据集中(例如,如果当前文件包含A -> 2),则获取A的数据集,该数据集的连接计数可能为1,并向其中添加2)。