排序后 去掉重复的行 保留最大值
听说有的6000条要10分钟
我的36656条不到6秒
package com.myapp;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import com.myapp.RecordComparator;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class Exceleidolon extends JFrame {
/**
* what is serialVersionUID
*/
private static final long serialVersionUID = 1L;
/**
* @param args
*/
private JTextArea outputArea;
private JLabel fileName;
private JButton openFile;
private JButton changeButton;
public Exceleidolon() {
super("Excel eidolon");
openFile = new JButton("Open File");
ButtonHandler handler = new ButtonHandler();
openFile.addActionListener(handler);
addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent event) {
}
}
);
outputArea = new JTextArea();
outputArea.setLineWrap(true);
ScrollPane scrollPane = new ScrollPane();
scrollPane.add(outputArea);
Container container = getContentPane();
container.add(openFile, BorderLayout.NORTH);
container.add(scrollPane, BorderLayout.CENTER);
setSize(600, 600);
setVisible(true);
}
protected void openFile() {
// TODO Auto-generated method stub
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION)
return;
File fileName = fileChooser.getSelectedFile();
if (fileName == null || fileName.getName().equals(""))
JOptionPane.showMessageDialog(this, "Invalid File Name", "Invalid File Name", JOptionPane.ERROR_MESSAGE);
else {
//my function
outputArea.setText(fileName.getPath() + fileName.getName());
try {
// Excel workbook
Workbook workbook = Workbook.getWorkbook(fileName);
//gain first Excel sheet
Sheet sheet = workbook.getSheet(0);
//gain Data
Vector allrows = new Vector();
for (int i = 0; i < sheet.getRows(); i ++) {
Vector rows = new Vector();
for (int j = 0; j < sheet.getColumns(); j ++) {
Cell cell = sheet.getCell(j,i);
String data = cell.getContents();
rows.add(data);
}
allrows.add(rows);
}
workbook.close();
//sort Data by model
Collections.sort(allrows, new RecordComparator());
// cut same record
int k = 3;
Vector tmpV = new Vector();
Iterator its = allrows.iterator();
while (its.hasNext()) {
Vector cur = (Vector) its.next();
/*
* 如是不是第一次
*
*/
if (k == 4) {
String curS = (String) cur.get(0);
String tmpS = (String) tmpV.get(0);
/*
* 如果相同
*/
if (curS.equals(tmpS)) {
String n1 = (String) cur.get(4);
String n2 = (String) tmpV.get(4);
int k1 = Integer.parseInt(n1);
int k2 = Integer.parseInt(n2);
/*
* 小了,要交换
*/
if (k2 < k1) {
tmpV.removeAllElements();
Iterator it = cur.iterator();
while (it.hasNext()) {
String eee = (String) it.next();
tmpV.add(eee);
}
its.remove();
} else {
its.remove();
}
} else {
tmpV = cur;
}
}
/*
* 如果是第一次
* 第一个记录给tmpV
* k改
*/
if (k == 3) {
tmpV = cur;
k = 4;
}
}
// final write Excel file
WritableWorkbook outputbook = Workbook.createWorkbook(new File("output.xls"));
WritableSheet mysheet = outputbook.createSheet("First Sheet", 0);
for (int i = 0; i < allrows.size(); i ++) {
Vector wRows = (Vector) allrows.get(i);
for (int j = 0; j < 5; j ++) {
String mydata = (String) wRows.get(j);
Label label = new Label(j, i, mydata);
mysheet.addCell(label);
}
}
outputbook.write();
outputbook.close();
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Exceleidolon app = new Exceleidolon();
app.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
private class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
openFile();
}
}
}
package com.myapp;
import java.util.Comparator;
import java.util.Vector;
public class RecordComparator implements Comparator {
public int compare(Object record1, Object record2) {
Vector v1 = (Vector) record1;
Vector v2 = (Vector) record2;
String value1 = (String) v1.get(0);
String value2 = (String) v2.get(0);
Comparable vv1, vv2;
if ((value1 instanceof Comparable) && (value2 instanceof Comparable)) {
vv1 = (Comparable) value1;
vv2 = (Comparable) value2;
return vv1.compareTo(vv2);
} else
return 0;
}
}
阅读(699) | 评论(0) | 转发(0) |