Задача :
Есть файл. Количество строк неизвестно.Каждая строка файла,представляет собой запись вида :
Покупатель Товар Количество
Нужно создать массив со всеми покупателями.
Для каждого покупателя подсчитать количество приобретенных им единиц каждого вида товаров.
Список вывести в алфавитном порядке фамилий покупателей.
Входные данные из файла :
Иванов газета 10
Петров ручка 5
Николаев тетрадь 3
Иванов ручка 2
Николаев ручка 1
Петров тетрадь 2
Николаев газета 1
Выводимые данные на экран :
Иванов : газета - 10 шт ; ручка - 5 шт ;
Николаев : газета - 1 шт ; ручка - 1 шт ; тетрадь - 3 шт;
Петров : ручка - 5 шт ; тетрадь - 2 шт;
Мой код :
package semnadcat;
import java.io.IOException;
import java.io.*;
/**
*
* @author Марат
*/
public class Semnadcat2 {
public static void main(String args[]) {
try(FileReader reader = new FileReader("C:\\SomeDir\\notes3.txt")){
int c;
while((c=reader.read())!=-1){
System.out.print((char)c);
}
}
catch(IOException ex){
System.out.println(ex.getMessage());
}
System.out.println(" ");
}
}
Мои ошибки:
Не понимаю каким образом можно сохранять в массив данные файла. Удается только посимвольно вытащить информацию на экран.
В самом примитивном случае можно сделать так:
Создаете класс Customer
:
public class Customer {
private String mSurname;
private String mProduct;
private int mAmount;
public Customer(String line) {
String[] customer = line.split(" ");
mSurname = customer[0];
mProduct = customer[1];
mAmount = Integer.parseInt(customer[2]);
}
public String getSurname() {
return mSurname;
}
public String getProduct() {
return mProduct;
}
public int getAmount() {
return mAmount;
}
}
Создаете ArrayList<Customer>
и заполняете его данными из файла:
ArrayList<Customer> customers = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new FileReader("Customers.txt"));
String currentLine;
while ((currentLine = bufferedReader.readLine()) != null) {
customers.add(new Customer(currentLine));
}
bufferedReader.close();
А дальше совсем просто.
UPD:
Вывод информации о покупателях на консоль:
С помощью обычного цикла for
:
for (int i=0; i<customers.size(); i++) {
Customer customer = customers.get(i);
System.out.println(customer.getSurname() + " | " + customer.getProduct() + " | " + customer.getAmount());
}
С помощью цикла for
в стиле for each
:
for (Customer customer : customers) {
System.out.println(customer.getSurname() + " | " + customer.getProduct() + " | " + customer.getAmount());
}
С помощью Stream API (Java 8):
customers.stream()
.map(x -> x.getSurname() + " | " + x.getProduct() + " | " + x.getAmount())
.forEach(System.out::println);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Из кода выводится список сформированных по длине словосочетания, которые в дальнейшем печатаются на imageНе могу придумать условие, чтобы...
Хочу отслеживать событие открытия SpinnerПопробовал повесить на него View
Пишу тест, в котором хочу обработать нажатие на элемент списка recyclerView