Необходимо переделать не большую часть кода не используя циклы (for, while)
Имеется код, цель которого собрать всю информацию из csv файла (в котором находится информация о товарах), после чего код должен создать Entry класс для каждого отдельного продукта.
Необходимо переделать код без цикла for.
public class Repository {
private static final String FILE_PATH = "src/fp/sales/sales-data.csv";
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
public ArrayList<Entry> data = new ArrayList<>();
public Repository() {
try {
List<String> list = Files.readAllLines(Paths.get(FILE_PATH));
String cvsSplitBy = "\t";
for (int i = 1; i < list.size(); i++) {
String[] products = list.get(i).split(cvsSplitBy);
Entry product = new Entry();
product.setDate(LocalDate.parse(products[0], formatter));
product.setState(products[1]);
product.setProductId(products[2]);
product.setCategory(products[3]);
product.setAmount(Double.parseDouble(products[5].replace(",", ".")));
data.add(product);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ответы (1 шт):
Рекурсия
Если вы хотите сделать цикл без цикла, то у вас всегда только один вариант - рекурсия.
Если вы не знаете, что это такое, то объясню: это когда функция (метод) вызывает сама себя и сама себе передаёт параметры.
Вам надо создать вот примерно такой метод:
private SomeData cycle(int cyclesCount, SomeData some) {
if (cyclesCount == 0) {
return some;
} else {
// какая-то логика
}
cycle(--cyclesCount, some);
}
и вызвать этот метод вместо цикла. Вот и всё. Учитывайте только, что рекурсию априори лучше заменить на цикл. Ошибки в рекурсии могут зациклить программу. Ну и про StackOverFlow не забываем.
Java 8
Если у вас есть требование, чтобы отсутствовал именно классический синтаксис цикла, то можно использовать метод forEach() (на самом деле он не относится к Stream API, хотя многие путают). Вот так это будет:
list.forEach(productsEntry -> {
String[] products = productsEntry.split(cvsSplitBy);
Entry product = new Entry();
product.setDate(LocalDate.parse(products[0], formatter));
product.setState(products[1]);
product.setProductId(products[2]);
product.setCategory(products[3]);
product.setAmount(Double.parseDouble(products[5].replace(",", ".")));
data.add(product);
})