Java 如何重新格式化以下具有动态值的文件信息?

Java 如何重新格式化以下具有动态值的文件信息?,java,Java,我需要按部门代码分类,部门行也不应重复 例如,本A01中的部门代码是位于末尾的部门代码。该A01值在文件中是动态的 在处理输入文件之后,我们需要发送如下分类的输出文件 输入 COMPANY100~ABCD~SAJED~1~1~1 COMPANY150~200605049829~ ~ ~1~ ~1 DEPART160~N~ABCD~A01 EMP180~N~3~BAKK 5401281~46~D~11 DEPART160~N~ABCD~A02 EMP180~N~3~BAKK 5401282~46~

我需要按部门代码分类,部门行也不应重复

例如,本A01中的部门代码是位于末尾的部门代码。该A01值在文件中是动态的

在处理输入文件之后,我们需要发送如下分类的输出文件

输入

COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~B081 5401286~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~3~B082 5401287~49~D~11
COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11 
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
EMP180~N~3~B081 5401286~49~D~11 
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
EMP180~N~3~B082 5401287~49~D~11
预期产出

COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~B081 5401286~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~3~B082 5401287~49~D~11
COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11 
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
EMP180~N~3~B081 5401286~49~D~11 
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
EMP180~N~3~B082 5401287~49~D~11
有人能帮我翻译一下代码片段或逻辑吗

谢谢。

列出公司值=新建ArrayList();
    List<String> companyValues = new ArrayList<>();
    TreeMap<String, List<String>> content = new TreeMap<>();
    StringTokenizer st = new StringTokenizer(string, delimiter);
    String earlierLine = null;
    while (st.hasMoreTokens()) {
        String line = st.nextToken().trim();
        if(line.contains("COMPANY100") || line.contains("COMPANY150")) {
            // addCompany
            companyValues.add(line);
        } else if(line.startsWith("DEPART160")) {
            earlierLine = line;
        } else {
            if (!content.containsKey(earlierLine)) {
                content.put(earlierLine, new ArrayList<String>());
            }
            content.get(earlierLine).add(line);
        }
    }

    StringBuffer sb = new StringBuffer();
    for(String companyValue: companyValues) {
        sb.append(companyValue);
        sb.append(delimiter);
    }
    for(Map.Entry<String, List<String>> entry : content.entrySet()) {
        String key = entry.getKey();
        List<String> values = entry.getValue();
        sb.append(key);
        sb.append(delimiter);
        for(String value: values) {
            sb.append(value);
            sb.append(delimiter);
        }
    }
    sb.toString()
树映射内容=新树映射(); StringTokenizer st=新的StringTokenizer(字符串,分隔符); 字符串earlierLine=null; 而(st.hasMoreTokens()){ 字符串行=st.nextToken().trim(); 如果(第行包含(“公司100”)|第行包含(“公司150”)){ //阿德公司 公司价值。添加(行); }否则,如果(第160行开始){ 早期线=线; }否则{ 如果(!content.containsKey(earlierLine)){ put(earlierLine,newarraylist()); } content.get(earlierLine).add(line); } } StringBuffer sb=新的StringBuffer(); for(字符串companyValue:companyValue){ 附加(公司价值); 某人附加(定界符); } for(Map.Entry:content.entrySet()){ String key=entry.getKey(); 列表值=entry.getValue(); 某人附加(钥匙); 某人附加(定界符); for(字符串值:值){ 附加(价值); 某人附加(定界符); } } (某人)
逐行读取字符串,如果字符串以DEVICE开头,则将其作为键存储在哈希表中,列表为值,如果键存在,则将下一行添加到其值列表中,否则创建新键并添加下一行。