Java 比较对象ArrayList的日期方面
我正在尝试使用Collections.sort(arraylist)功能对包含日期对象的对象进行排序。我想对arraylist进行排序,以便日期确定它们在arraylist中的排序位置 目前没有进行排序。我正在上传目录中包含的所有文件,并从这些文件中删除行,这些文件包含日期。但是,Collection.sort功能似乎没有任何作用。文件到达时会被分类 我将有一个简单的例子说明排序是如何进行的,然后是我的代码 分类:Java 比较对象ArrayList的日期方面,java,sorting,date,collections,Java,Sorting,Date,Collections,我正在尝试使用Collections.sort(arraylist)功能对包含日期对象的对象进行排序。我想对arraylist进行排序,以便日期确定它们在arraylist中的排序位置 目前没有进行排序。我正在上传目录中包含的所有文件,并从这些文件中删除行,这些文件包含日期。但是,Collection.sort功能似乎没有任何作用。文件到达时会被分类 我将有一个简单的例子说明排序是如何进行的,然后是我的代码 分类: "2015-08-05 13:18:59.199","RFBase-TD","4
"2015-08-05 13:18:59.199","RFBase-TD","40","Device message","S",";0CC4: F2FF: 04C7: pitv1"
"2015-08-24 08:45:13.977","RFBase-TD","40","Device message","S","0028: 00 63 7E 21 00CA: "
"2015-08-18 11:35:48.891","RFBase-TD","40","Device message","S",";0006: 8490: 0000: ltpv4"
"2015-08-12 14:30:42.778","RFBase-TD","40","Device message","S",";1066: 6E25: 00C7: bctv1"
main.java中的代码:
private static ArrayList<logObject> rftdArrayList = new ArrayList<logObject>();
private static void createFolderChooser(final JFrame fcFrame) throws IOException
{
resetArrayLists();
int i = 1; int j = 1;
fcFrame.setVisible(true);
String filename = File.separator+"tmp";
JFileChooser fileChooser = new JFileChooser(new File(filename));
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.showOpenDialog(fcFrame);
lblFileChosen.setText("Folder Chosen: "+ fileChooser.getSelectedFile());
File[] files = fileChooser.getSelectedFile().listFiles();
LogFileTA_1.setText(null);
System.out.println(files.length);
for ( File file : files ) {
System.out.println(file.getName());
}
if (files.length != 0)
{
JProgressBar progressBar = new JProgressBar();
progressBar.setStringPainted(true);
Border border = BorderFactory.createTitledBorder("Calcualating...");
progressBar.setBorder(border);
fcFrame.add(progressBar);
fcFrame.setVisible(true);
double percent = 0;
int intPercent = 0;
progressBar.setValue(intPercent);
for (File f : files)
{
if (f.isFile())
{
BufferedReader inputStream = null;
String text = null;
try {
inputStream = new BufferedReader(new FileReader(f));
String line = null;
while ((line = inputStream.readLine()) != null)
{
if (line.contains("RFBase-TD")){
rftdArrayList.add(new logObject(line,i));
if (i<10)
{
LogFileTA_1.append(i+") "+line);
LogFileTA_1.append("\n");
}
else if(i<100)
{
LogFileTA_1.append(i+") "+line);
LogFileTA_1.append("\n");
}
else if(i<1000)
{
LogFileTA_1.append(i+") "+line);
LogFileTA_1.append("\n");
}
else
{
LogFileTA_1.append(i+") "+line);
LogFileTA_1.append("\n");
}
i++;
}
}
}
finally {
if (inputStream != null) {
inputStream.close();
}
}
j++;
percent = 100*(j/files.length);
intPercent = (int) (percent + 0.5); //Adds .5 in order to round.
progressBar.setValue(intPercent);
}
}
if (rftdArrayList.size() == 0)
{
}
else
{
LogFileTA_1.setCaretPosition(0);
logFileResults();
}
}
else
{
JOptionPane.showMessageDialog(frmRftdAnalyzer, "Folder contains no RFTD log files", "Error", JOptionPane.ERROR_MESSAGE);
}
}
private void initialized()
{
mntmOpen.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
errorTree.setModel(null);
createFileChooser(frmRftdAnalyzer);
}
});
}
private static ArrayList rftdArrayList=new ArrayList();
私有静态void createFolderChooser(最终JFrame fcFrame)引发IOException
{
resetArrayList();
int i=1;int j=1;
fcFrame.setVisible(真);
字符串文件名=File.separator+“tmp”;
JFileChooser fileChooser=newjfilechooser(新文件(文件名));
fileChooser.setFileSelectionMode(仅限JFileChooser.DIRECTORIES_);
fileChooser.showOpenDialog(fcFrame);
lblfileselected.setText(“所选文件夹:+fileChooser.getSelectedFile());
File[]files=fileChooser.getSelectedFile().listFiles();
LogFileTA_1.setText(null);
System.out.println(files.length);
用于(文件:文件){
System.out.println(file.getName());
}
如果(files.length!=0)
{
JProgressBar progressBar=新的JProgressBar();
progressBar.SetStringPaint(真);
Border Border=BorderFactory.createTitleBorder(“计算…”);
progressBar.订单(边界);
fcFrame.add(进度条);
fcFrame.setVisible(真);
百分之二=0;
整数百分比=0;
progressBar.setValue(百分比);
用于(文件f:文件)
{
if(f.isFile())
{
BufferedReader inputStream=null;
字符串文本=空;
试一试{
inputStream=新的BufferedReader(新的文件读取器(f));
字符串行=null;
而((line=inputStream.readLine())!=null)
{
if(行包含(“RFBase TD”)){
rftdArrayList.add(新logObject(行,i));
如果(I请发布代码,说明如何将元素添加到列表中,然后如何调用organizeArrayList()。我添加了代码,organizeArrayList()的实际名称实际上是createFolderChooser()。我已经相应地更新了所有内容。这里有很多代码,模糊了对问题的理解。请参阅。您的示例代码没有调用集合。sort
任何地方。您可以添加该部分吗?嘿,Mick,我把Collection.sort放在错误的位置,因为我有两个非常相似的函数。事情似乎排序正确y现在。谢谢!请发布代码,说明如何将元素添加到列表中,然后如何调用organizeArrayList()。我添加了代码,organizeArrayList()的实际名称实际上是createFolderChooser()。我已经相应地更新了所有内容。这里有很多代码,模糊了对问题的理解。请参阅。您的示例代码没有调用集合。sort
任何地方。您可以添加该部分吗?嘿,Mick,我把Collection.sort放在错误的位置,因为我有两个非常相似的函数。事情似乎排序正确好了,谢谢你!
public class logObject implements Comparable<logObject>
{
protected String logEntry;
protected int lineNumber;
protected String time;
protected String device;
protected String deviceThrough;
protected String deviceArea;
protected String endTime;
protected String timeElapsed;
protected int endLine;
protected String dateAndTime;
protected Date date;
protected SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH);
public logObject(String logEntry, int lineNumber)
{
this.logEntry = logEntry;
this.lineNumber = lineNumber;
this.time = logEntry.substring(12,24);
this.dateAndTime = logEntry.substring(1,24);
try {
this.date = formatter.parse(dateAndTime);
} catch (ParseException e) {
e.printStackTrace();
}
//System.out.println(date.getTime());
this.device = null;
this.deviceThrough = null;
this.deviceArea = null;
this.endTime = null;
this.endLine = 9999;
this.timeElapsed = null;
}
public String getLogEntry()
{
return this.logEntry;
}
public void changeTimeElapsed(String timeElapsed)
{
this.timeElapsed = timeElapsed;
}
public long getDateTime()
{
return this.date.getTime();
}
public Date getDate()
{
return this.date;
}
@Override
public int compareTo(logObject o)
{
return this.getDate().compareTo(o.getDate());
//return Long.valueOf(getDate().getTime()).compareTo(Long.valueOf(o.getDate().getTime()));
}