На этом этапе только добавил метод фильтрации листа Логов по датам. И вызов этого метода перед началом проверки значения field1, которое надо возвратить. Все выводится верно. Почему до этих выводов валик пристал?
@Override
public Set<Object> execute(String query) {
Set<Object> list = new HashSet<>();
List<Log> tempList = new ArrayList<>();
if (query.equals("get ip")) list = logList.stream().map(log -> log.ip).collect(Collectors.toSet());
else if (query.equals("get user")) list = logList.stream().map(log -> log.user).collect(Collectors.toSet());
else if (query.equals("get date")) list = logList.stream().map(log -> log.date).collect(Collectors.toSet());
else if (query.equals("get event")) list = logList.stream().map(log -> log.event).collect(Collectors.toSet());
else if (query.equals("get status")) list = logList.stream().map(log -> log.status).collect(Collectors.toSet());
else {
String[] allParametres = query.split("\"");
String parametr = allParametres[1];
String[] splits = query.split(" ");
if (splits.length >= 6) {
switch (splits[3]) {
case "ip": {
tempList = logList.stream().filter(log -> log.ip.equals(parametr)).collect(Collectors.toList());
break;
}
case "user": {
tempList = logList.stream().filter(log -> log.user.equals(parametr)).collect(Collectors.toList());
break;
}
case "date": {
tempList = logList.stream().filter(log -> {
try {
return log.date. equals(dateFormat.parse(parametr));
} catch (ParseException e) { }
return false;}).collect(Collectors.toList());
break;
}
case "event": {
tempList = logList.stream().filter(log -> log.event.toString().equals(parametr)).collect(Collectors.toList());
break;
}
case "status": {
tempList = logList.stream().filter(log -> log.status.toString().equals(parametr)).collect(Collectors.toList());
break;
}
default: return list;
}
if(allParametres.length == 6) {
try {
Date after = dateFormat.parse(allParametres[3]);
Date befor = dateFormat.parse(allParametres[5]);
tempList = getResultBetweenDate(tempList, after, befor);
} catch (ParseException e) {
e.printStackTrace();
}
}
switch (splits[1]) {
case "ip": {
list = tempList.stream().map(log -> log.ip).collect(Collectors.toSet());
break;
}
case "user": {
list = tempList.stream().map(log -> log.user).collect(Collectors.toSet());
break;
}
case "date": {
list = tempList.stream().map(log -> log.date).collect(Collectors.toSet());
break;
}
case "event": {
list = tempList.stream().map(log -> log.event).collect(Collectors.toSet());
break;
}
case "status": {
list = tempList.stream().map(log -> log.status).collect(Collectors.toSet());
break;
}
}
}
}
return list;
}
Public List<Log> getResultBetweenDate(List<Log> logs, Date after, Date before) {
List<Log> list = logs.stream()
.filter(log -> ((after == null) || (log.date.after(after) || log.date.equals(after))))
.filter(log -> ((before == null) || (log.date.before(before) || log.date.equals(before))))
.collect(Collectors.toList());
return list;
package com.javarush.task.task39.task3913;
import java.nio.file.Paths;
import java.util.Calendar;
import java.util.Date;
public class Solution {
public static void main(String[] args) {
LogParser logParser = new LogParser(Paths.get("c:/logs/"));
// System.out.println("КОЛИЧЕСТВО уникальных ip РАВНО " + logParser.getNumberOfUniqueIPs(null, new Date()));
// System.out.println(" Все имена мы нашли " + logParser.getAllUsers( ));
//System.out.println(" количество всех имен мы нашли " + logParser.getNumberOfUsers( null, new Date()));
// System.out.println(" количество событий у юзера мы нашли " + logParser.getNumberOfUserEvents( "Amigo", null, new Date()));
// System.out.println(" Юзера по IP мы нашли " + logParser.getUsersForIP( "127.0.0.1", null, new Date()));
//System.out.println("Вывели залогиненых юзеров " + logParser.getLoggedUsers(null, new Date()));
//System.out.println("Вывели кто скачал плагин юзеров " + logParser.getDownloadedPluginUsers(null, new Date()));
// System.out.println("Вывели кто скачал плагин юзеров " + logParser.getSolvedTaskUsers(null, new Date()));
//System.out.println("Вывели кто скачал номер задачи юзеров " + logParser.getSolvedTaskUsers(null, null, 18));
// System.out.println("Первый раз залогинился Морозко " + logParser.getDateWhenUserLoggedFirstTime( "Eduard Petrovich Morozko", null, null));
// System.out.println("Первый раз Amigo решил задачу " + logParser.getDateWhenUserSolvedTask( "Amigo", 18, null, null));
// System.out.println("Когла Морозко написал сообщения " + logParser.getDatesWhenUserWroteMessage( "Eduard Petrovich Morozko", null, null));
//System.out.println("Вывод количества попыток по задаче " + logParser.getNumberOfAttemptToSolveTask(18, null, null));
//System.out.println("Вывод количества успешных попыток по задаче " + logParser.getNumberOfSuccessfulAttemptToSolveTask(18, null, null));
// System.out.println("Вывод мапы по таскам " + logParser.getAllSolvedTasksAndTheirNumber(null, null));
// System.out.println("Вывод мапы по таскам с кол-вом решений" + logParser.getAllDoneTasksAndTheirNumber(null, null));
// System.out.println("Вывод имен" + logParser.execute("get user"));
// System.out.println("Вывод имен" + logParser.execute("get ip"));
// System.out.println("Вывод имен" + logParser.execute("get date"));
System.out.println("Вывод имен" + logParser.execute("get event"));
// System.out.println("Вывод имен" + logParser.execute("get status"));
System.out.println("Вывод статуса по юзеру " + logParser.execute("get status for user = \"Amigo\""));
System.out.println("Вывод события по дате " + logParser.execute("get event for date = \"30.08.2012 16:08:40\""));
System.out.println("Вывод ip по Морозко" + logParser.execute("get ip for user = \"Eduard Petrovich Morozko\""));
System.out.println("Вывод юзера по событию" + logParser.execute("get user for event = \"DONE_TASK\""));
System.out.println("Вывод даты по ip" + logParser.execute("get date for ip = \"192.168.100.2\""));
System.out.println("Вывод статуса по дате " + logParser.execute("get status for date = \"30.08.2012 16:08:40\""));
System.out.println("Вывод события по юзеру " + logParser.execute("get event for user = \"Vasya Pupkin\""));
System.out.println("Вывод события по юзеру и между датами " + logParser.execute("get event for user = \"Eduard Petrovich Morozko\" and date between \"11.12.2013 0:00:00\" and \"03.01.2014 23:59:59\""));
System.out.println("Вывод ИП по событию и между датами " + logParser.execute("get ip for event = \"DONE_TASK\" and date between \"11.12.2011 0:00:00\" and \"03.01.2017 23:59:59\""));
System.out.println("Вывод ип по статусу и между датами " + logParser.execute("get ip for status = \"OK\" and date between \"11.12.2012 0:00:00\" and \"03.01.2014 23:59:59\""));
System.out.println("Вывод даты по событию и между датами " + logParser.execute("get date for event = \"DONE_TASK\" and date between \"11.12.2011 0:00:00\" and \"03.01.2014 23:59:59\""));
}
}