Страницы

Поиск по вопросам

вторник, 22 января 2019 г.

Обобщённый метод для чтения данных из файла

Здравствуйте. Подскажите, как написать обобщённый метод чтения данных из файла. Например, в одном случае нужно считать строки, в другом - целые числа. Как написать метод типа такого:
public static List readFromFile(Path pathIn, TypeValue typeValue){...};
Корректен ли такой код:
public static List readFromFile(Path pathIn, TypeValue typeValue){ try(Scanner in = new Scanner(pathIn)) { if (typeValue == TypeValue.typeInt) { List list = new ArrayList<>(); while (in.hasNextInt()) { list.add(in.nextInt()); } return list; } else { List list = Files.readAllLines(pathIn); return list; } } catch (IOException e){ return null; } }
Здесь pathIn - путь к файлу с данными, typeValue - флаг для обозначения данных (Integer, String и т.д.). Смущает, что возвращается не параметризованный List. Как вообще решается задача чтения из файла, если формат данных может быть разным - Integer, Double, String и т.д.? Или следует писать для каждого типа данных свой код для чтения? Как-то громоздко тогда получается.


Ответ

Функционал из Java 8 Stream & Lambda позволяет передавать в метод функциональный интерфейс, который будет применен к потоку данных:
public void start() throws IOException { Path path = Paths.get("test"); List resultStringList = readFile(path, Function.identity()); List resultIntList = readFile(path, Integer::parseInt); }
public List readFile(Path path, Function func) throws IOException { return Files.lines(path) .map(func) .collect(Collectors.toList()); }
}

Комментариев нет:

Отправить комментарий