Проблемы с новичком.У меня есть arrayList с несколькими элементами, и у меня возникают проблемы при попытке вернуть список всех дубликатов.Информация, которую я храню в arrayList:
LogEntry(LocalDateTime date, String status, int id, String cod)
2018-10-23T12:05:22 DATA 325 6d33
2017-01-13T10:09:30 INFO 325 5f22
2018-05-10T18:55:30 INFO 111 6a23
2018-05-03T17:44:50 ERROR 325 5f22
2017-06-15T16:25:31 DATA 111 8472
ArrayList<LogEntry> logList = new ArrayList();
Я пытался использовать это для поиска строковых записей:
String logLevel;
System.out.println("Search Log Level:\n(Info, Debug, Error)");
logLevel = read.nextLine().toUpperCase();
List<Integer> allIndexes
= IntStream.range(0, logList.size()).boxed()
.filter(i -> logList.get(i).status.equals(logLevel))
.collect(Collectors.toList());
// check duplicates
for (int i = 0; i < allIndexes.size(); i++) {
System.out.println(logList.get(i).checkData());
}
Но у меня получаются смешанные результаты (получены неверные результаты)при запуске с другого компьютера).
Попытка адаптироваться к поиску целых чисел просто не работает:
private static void id_n() {
int logid;
System.out.println("ID:\n");
logid = read.nextInt();
List<Integer> allIndexes
= IntStream.range(0, logList.size()).boxed()
.filter(i -> logList.get(i).id.equals(logid))
.collect(Collectors.toList());
for (int i = 0; i < allIndexes.size(); i++) {
System.out.println(logList.get(i).checkData());
}
}
Так что я уже боюсь пытатьсяполучить диапазон дат из этого беспорядка.
Что я здесь не так делаю?Как это можно улучшить?Спасибо за любую помощь.
Почти забыл, checkData - это функция из моего класса LogEntry:
public String checkData() {
return " > " + this.date + " " + this.status + " " + this.id + " " + this.cod;
}
Решено , спасибо @JB Nizet и @ Deadpool
статус :
logList.stream().filter(i -> i.status.equals(logLevel)).forEach(j -> System.out.println(j.checkData()));
id :
logList.stream().filter(i -> i.id == logid).forEach(j -> System.out.println(j.checkData()));
Для дальнейшей обработки собранных данных я только что отправил ихновый массивList.
status :
ArrayList<LogEntry> logLevels = new ArrayList();
logList.stream().filter(i -> i.status.equals(logLevel)).forEach(j -> logLevels.add(0, j));