На этом этапе только добавил метод фильтрации листа Логов по датам. И вызов этого метода перед началом проверки значения 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;
public enum Event {
LOGIN,
DOWNLOAD_PLUGIN,
WRITE_MESSAGE,
SOLVE_TASK,
DONE_TASK
}