Chinaunix首页 | 论坛 | 博客
  • 博客访问: 284257
  • 博文数量: 82
  • 博客积分: 2607
  • 博客等级: 少校
  • 技术积分: 785
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-14 15:23
文章分类

全部博文(82)

文章存档

2012年(4)

2010年(1)

2009年(2)

2008年(8)

2007年(34)

2006年(33)

我的朋友

分类: Java

2006-09-22 07:54:14

排序后 去掉重复的行 保留最大值
听说有的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) |
给主人留下些什么吧!~~