gpt4 book ai didi

java - 如何对文件进行分组排序?

转载 作者:太空宇宙 更新时间:2023-11-04 15:13:33 26 4
gpt4 key购买 nike

我正在尝试使用时间戳对分隔文件进行排序 |水平|传感器名称 |测量值结构,以便与具有最小时间戳的传感器关联的所有数据将首先以递增的时间戳列出,然后与具有第二小的时间戳的传感器关联的所有数据将以递增的时间戳列出,等等...

这是要排序的分隔文件的示例:

20140102073500|1|sensor5|0.188|  
20140102073502|1|sensor2|0.193|
20140102073600|2|sensor5|0.577|
20140102073603|2|sensor2|0.585|
20140102073700|3|sensor5|1.207|
20140102073702|3|sensor2|1.183|

这是我想要的:

20140102073500|1|sensor5|0.188|  
20140102073600|2|sensor5|0.577|
20140102073700|3|sensor5|1.207|
20140102073502|1|sensor2|0.193|
20140102073603|2|sensor2|0.585|
20140102073702|3|sensor2|1.183|

(请注意,我无法按“传感器名称/时间戳”排序,因为具有最小时间戳的传感器从一个文件更改为另一个文件...)

这是我尝试使用的编码(仅按升序时间戳排序):

import java.io.*;
import java.util.*;
public class Sort8 {
public static void main(String[] args) throws Exception {
Map<String, String> map;
try (BufferedReader reader = new BufferedReader(new FileReader("C:\\Test\\test.txt"))) {
map = new TreeMap<>();
String line;
while((line=reader.readLine())!=null){
map.put(getField(line),line);
System.out.println(getField(line));
}
System.out.println(map.values());
}
try (FileWriter writer = new FileWriter("C:\\Test\\test_sorted.txt")) {
for(String val : map.values()){
// System.out.println(val);
writer.write(val) ;
writer.write("\r\n");
}
}
}
private static String getField(String line) {
return ((line.split("\\|")[1])+(line.split("\\|")[3]));
}
}

我是 Java 新手,因此提前感谢您提供的帮助!

最佳答案

在构建树形图时放置一个比较器。

    map = new TreeMap<>(new Comparator<String>() {

@Override
public int compare(String s1, String s2) {
String[] a1 = s1.split("|");
String[] a2 = s2.split("|");
// First compare sensor
int sensor1 = Integer.parseInt(a1[2].replace("sensor", ""));
int sensor2 = Integer.parseInt(a2[2].replace("sensor", ""));
if(sensor1 != sensor2) {
return Integer.valueOf(sensor1).compareTo(sensor2);
}
// Second compare timestamp
long time1 = Long.parseLong(a1[0]);
long time2 = Long.parseLong(a2[0]);
return Long.valueOf(time1).compareTo(time2);
}

});

关于java - 如何对文件进行分组排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com