Моя ситуация
- У меня есть метод, который создает
List<String>
- У меня есть другой метод, который требует
String
- Я хочу взять вывод из (1) и поместить его в (2)
Мой подход
У меня очень соблазн просто сгладить этот List<String>
в один большой String
, но мой здравый смысл покалывает. Поэтому, прежде чем я слепо сделал что-то вроде этого:
List<String> fileLines = Files.readAllLines(Paths.get(""));
String jsonString = "";
for (String s : fileLines) {
jsonString += s;
}
JSONObject jsonObject = new JSONObject(jsonString);
Я перестала думать и искать и спрашивать. Я обнаружил, что NetBeans предлагает следующее:
List<String> fileLines = Files.readAllLines(Paths.get(""));
String jsonString = fileLines.stream().map((s) -> s)
.reduce(accountsJsonString, String::concat);
JSONObject jsonObject = new JSONObject(jsonString);
но моя мать всегда предупреждала меня об использовании кода, который я не понимаю. Я думаю, что это все еще копирует все данные и помещает их вместе в одну большую строку, поэтому я не вижу никакой практической разницы между тем и тем, что я изначально придумал.
Мой вопрос
Есть ли что-то не так, просто приклеивая все строки вместе в одну большую строку, с точки зрения лучших практик? Есть ли способ достичь моей цели (используя java.nio
и org.json
in), считывая длинный файл JSON с диска и в память, которая не требует дублирования содержимого файла после его чтения?
Решение, которое я использовал
Этот ответ на первую (концептуальную) половину моего вопроса показывает, что было хуже, чем я понял. Я объединил эти два, чтобы ответить на вторую (практическую) половину моего вопроса следующим образом:
BufferedReader jsonReader = Files.newBufferedReader(Paths.get(...));
JSONObject jsonObject = new JSONObject(new JSONTokener(jsonReader));