如何对文件的排序进行分组?
Posted
技术标签:
【中文标题】如何对文件的排序进行分组?【英文标题】:How to group the sorting of a file? 【发布时间】:2014-01-13 01:16:50 【问题描述】:我正在尝试使用Time stamp | level | sensor name | measurement value
结构对分隔文件进行排序,以便与具有最小时间戳的传感器关联的所有数据首先以递增的时间戳列出,然后是与具有第二小的传感器关联的所有数据时间戳将在增加时间戳等中列出......
这是一个要排序的分隔文件示例:
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 新手,提前感谢您提供的帮助!
【问题讨论】:
使用比较器,在new TreeMap的参数中提供一个(); 【参考方案1】:在树状图的构造中放置一个比较器。
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);
);
【讨论】:
以上是关于如何对文件的排序进行分组?的主要内容,如果未能解决你的问题,请参考以下文章