У меня есть файл, содержащий данные в формате JSON. Я читаю его по строкам, и каждая строка имеет 1 запись JSON, поэтому формат действительно не проблема. Ниже приведен пример строки:Java 8 Streams Count all Keys
{"url": "http://ldrlongdistancerider.com/bikers_rights_motorcycle/rightsriders0163.php", "timestamp": 1257072412, "tags": ["nscensorship", "cloudmark", "network", "solutions", "content", "based", "spam", "signatures"]}
Что мне нужно сделать, это подсчитать все повторяющиеся URL-адреса и распечатать его люблю:
http://ldrlongdistancerider.com/bikers_rights_motorcycle/rightsriders0163.php" 1
Как я могу добиться этого с помощью потоков? Кстати, мне нужно отфильтровать записи на основе метки времени. Поэтому, если кто-то прошел ряд дат, мне пришлось бы считать URL-адреса, попадающие в этот диапазон. Я сделал большую часть этого, но эта подсчетная часть меня сбивает с толку.
Вот что я сделал до сих пор:
for (Path filePath : files) {
try {
Files.lines(Paths.get(filePath.toUri()))
.filter(s -> Link.parse(s).timestamp() > startSeconds)
.filter(s -> Link.parse(s).timestamp() < stopSeconds)
.forEach(s -> countMap.put(Link.parse(s).url(), 1));
} catch (IOException e) {
e.printStackTrace();
}
}
countMap является HashMap Строки, Integer
Вы можете использовать 'map (Link :: parse)', чтобы избежать синтаксического анализа всего три раза. – Bubletan
Я не могу, так как мне нужно отфильтровать URL-адреса на основе первой отметки времени. Использование ссылки на метод не даст мне то, что мне нужно. – Bytekoder