arnizibert ha scritto:
if (freqMap != null && freqMap.get(monthList.get(index - 1)) == sortedDates.size()
|| freqMap != null && (freqMap.get(monthList.get(index - 1)) * 100 / sortedDates.size()) > 50) {
System.out.println(monthList.get(index - 1).substring(0, 3));
}
Ci sono arrivano a fare una cosa del genere. Tipo sono arrivano all'ultimo indice:
vado a vedere quante volte il valore di quell'indice si riscontra, se e` riscontrato piu del 50% allora ci faccio qualcosa.
Ma a livello di Java Stream c'era la possibilita` di farla piu` breve? Non so se mi spiego
Innanzitutto le date NON le devi trattare solo come stringhe, va fatto un
parsing per ottenere un Calendar o (meglio) LocalDateTime. Da questi puoi accedere a ore, minuti, ecc... in maniera corretta, senza fare substring o altro di poco "pulito".
E comunque ribadisco che fare una logica che possa trattare un po' tutte le casistiche in generale, è abbastanza difficile. Ecco un caso emblematico:
2022-01-24T19:53:05
2022-01-24T19:53:25
2022-01-24T19:54:05
2022-01-24T19:54:25
Qui la distanza tra i secondi sui minuti non è regolare, quindi non lo puoi modellare come es. ripetizione ogni tot secondi. Però si può osservare la correlazione che c'è tra i due 05 e i due 25. Che è meno facile ...
2022-01-24T19:53:05 <---+
|
2022-01-24T19:53:25 <-------+
| |
2022-01-24T19:54:05 <---+ |
|
2022-01-24T19:54:25 <-------+
Quindi lo si può rappresentare con: 5,25 53,54 19 24 JAN ? 2022
E questo è ancora un caso basilare ...
arnizibert ha scritto:
Pero` come faccio a controllare se il cron che ho generato soddisfi le date su una lista?
Tipo ho questa cron:
0 * 19 24 JAN MON e devo vedere se si trovano delle date che soddisfanno la cron:
Questa è una parte concettualmente più facile. Ma per farla bene sarebbe buona cosa avere una classe es. CronExpression che "modella" l'espressione (non come stringa ma come i vari field già interpretati), possibilmente immutabile. In modo da poterla usare così:
CronExpression expr1 = CronExpression.parse("5,25 53,54 19 24 JAN ? 2022");
LocalDateTime dt = LocalDateTime.parse("2022-01-24T19:53:05");
if (expr1.matches(dt)) { ..... }
A meno di trovare una classe tipo CronExpression già fatta in qualche libreria, farla da zero sarebbe già questo un gran bel "esercizio"