排序行根据其中的单词作为键

时间:2011-12-20 08:44:34

标签: java sorting

 Odrer     ID    Descrption    Type 

Envelope  K205    Green       Paper     >>>>String Line with space in between
Box       J556    Yellow      Thermocol >>>>String Line with space in between
Envelope  L142    White       Plastic   >>>>String Line with space in between

我有一张上面的表格,我必须提供选项排序 基于列名的数据,如“按订单排序”,“按类型排序”之类的内容 PLZ建议我在Java中实现这一点的最佳想法...表行是字符串 隔开每个人的空间..

3 个答案:

答案 0 :(得分:0)

您必须开发自定义Comparator。例如以下内容。

class ColumnComparator implements Comparator<String> {
    private int column;
    ColumnComparator(int column) {
         this.column = column;
    }
    public int compare(String s1, String s2) {
        return getColumn(s1).compareTo(getColumn(s2));
    }
    private String getColumn(String line) {
        return line.split("\\s+")[column];
    }

然后你可以使用Arrays.sort()Collections.sort()传递你的数组或行的集合以及这个比较器的实例。我留下它来实现逻辑,按列名查找列索引。

}

答案 1 :(得分:0)

将表中的每一行表示为具有order,id,description和type属性的对象。将每个对象添加到集合(例如列表)中。然后,您可以创建不同的比较器,例如OrderComparatorTypeComparator,以分别根据订单或类型对集合进行排序。

例如,以下是您的数据类的外观:

public class Data{
    private final String order;
    private final String id;
    private final String description;
    private final String type;

    public Data(String order, String id, String description, String type) {
        this.order=order;
        this.id=id;
        this.description=description;
        this.type=type;
    }

    /** getter methods here **/
}

现在,您可以将它们添加到列表中并使用特定的比较器对其进行排序:

//add data to a list
List<Data> list = new ArrayList<Data>();
list.add(new Data("Envelope","K205","Green","Paper"));
list.add(new Data("Box","J556","Yellow","Thermocol"));
list.add(new Data("Envelope","L142","White","Plastic"));

//create a comparator to sort by type
Comparator<Data> typeComparator = new Comparator<Data>() {
    @Override
    public int compare(Data o1, Data o2) {
        return o1.getType().compareTo(o2.getType());
    }
};

//sort the list
Collections.sort(list, typeComparator);

答案 2 :(得分:0)

可能方法的概述(假设数据不是来自数据库):

  1. 将您的数据表示为具有相应字段的类:

    class YourData {
        private final String Order;
        private final String Id;
        private final String Description;
        private final String Type;
    
        // add getters, setters and appropriate constructors
    }
    

    使用适当的数据类型。您可以使用Scanner来解析数据。

  2. 为您要订购的每个属性写一个Comparator。如果您想要撤消订购,可以使用Collections.reverseOrder

  3. 将您的数据放入ArrayList,并使用Collections.sort和相应的Comparator来实现所需的排序。