2016-01-16 3 views
0

У меня есть текстовый файл со сто строк. Это выглядит примерно так: unitName unitPackage unitPrice. Мне нужно разобраться в этом и подвести итог. Например, мы получили эти четыре строки:Работа с объектами в массиве

foo1 01abc 30.00 

foo2 02abc 31.50 

foo1 04abc 35.00 

foo1 01abc 30.00 

После работы на я должен получить это следующим образом:

foo1 2 (01abc) 60.00 

foo2 1 (02abc) 31.50 

foo1 1 (04abc) 35.00 

Моя идея состояла в том, чтобы сделать продукт класса (Строка UnitName, String unitPackage, двойной UNITPRICE) и поставить его не Список_массивов что-то вроде этого:

List<Product> products = new ArrayList<>(); 

    while (inputFile.hasNextLine()) { 
     Product product = new Product(inputFile.next(), inputFile.next(), inputFile.nextDouble()); 
     products.add(product); 
    } 

до этого момента все работает нормально, но я не получаю идею, как сортировать вещи вверх , В общем, хорошая идея сделать это так? Пожалуйста, о совете.

+0

Сортировка, безусловно, не самый лучший подход к этому. Вы просто группируете значения, и порядок кажется несущественным. Использование 'HashMap' для группировки записей с помощью' (unitName, unitPackage) 'должно привести к повышению производительности. – fabian

+0

Пожалуйста, правильно отформатируйте свой вопрос. – user3743222

ответ

0

Существует множество способов сортировки списка массивов. В вашем конкретном случае, когда вы помещаете каждый элемент в список, возможно, самой простой формой является реализация карты, т. Е. HashMap, а не ArrayList.

После цикла вставки вы можете получить отсортированный список по методу values ​​() на карте.

0

Если вам нужно отсортировать список, вы можете использовать метод sort в классе Collections

public static <T> void sort(List<T> list, 
     Comparator<? super T> c) 

Для этого вам нужно создать Comparator, которые определяют, как отсортировать элементы.

List<Product> products = ... 
... 
Collections.sort(products, new Comparator<Product>() { 
    compare(Product o1, Product o2) { 
     // Here define how to compare two products 
    } 
}); 
// Here products is sorted as you defined before 
0

Вы можете сделать свою продукцию сопоставимой, выполнив Comparable<T> (см. docs). После этого вы должны реализовать compareTo(Product o), который сравнивает ваши продукты по атрибутам, которые вы читаете. Пожалуйста, прочитайте документы для получения более подробной информации.

Затем вы можете сортировать свою структуру данных, например. используя Arrays.sort(Object[] objs) (преобразование в массив и в список снова не должно быть проблемой).

Но, в любом случае, я предпочитаю путь Давиде Лоренцо МАРИНО с помощью компаратора, если вам не нужна эта логика. Если вы часто хотите сравнивать продукты, используйте способ внедрения Comparable<T>.

Смежные вопросы