Сортировка строк на основе слов в них в качестве ключей - PullRequest
0 голосов
/ 20 декабря 2011
 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

У меня есть таблица, похожая на приведенную выше, и я должен предоставить опции для сортировки данных по имени столбца, например, «сортировать по порядку», «сортировать по типу», что-то подобное, пожалуйста, предложите мне лучшие идеи длядобиться этого в Java ... Строки таблицы - это строки с пробелом, разделяющим каждый штрих ..

Ответы [ 3 ]

0 голосов
/ 20 декабря 2011

Представляет каждую строку в вашей таблице как объект с атрибутами порядка, идентификатора, описания и типа.Добавьте каждый объект в коллекцию, такую ​​как список.Затем можно создать различные компараторы, такие как OrderComparator и TypeComparator, чтобы отсортировать коллекцию по порядку или типу соответственно.

Например, вот как может выглядеть ваш класс данных:

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);
0 голосов
/ 20 декабря 2011

Схема возможного подхода (при условии, что данные не поступают из базы данных):

  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 для достижения желаемого порядка.

0 голосов
/ 20 декабря 2011

Вы должны разработать свой собственный компаратор. Например что-то вроде следующего.

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(), передавая туда массив или коллекцию ваших строк и экземпляр этого компаратора. Я оставляю вам возможность реализовать логику, которая находит индекс столбца по имени столбца.

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...