У меня есть следующие классы:
@Getter
public class SomeClass implements Serializable {
private LocalDate date;
private String smth;
List<PairKeyValue> quotaParams;
}
Класс PairKeyValue просто:
@Getter
public class PairKeyValue implements Serializable {
private String key;
private String value;
}
Я хочу сделать следующее:
1) Проверить, еслив SomeClass's
дата равна sysdate, затем проверьте значение в key="somekey"
, в list<PairKeyValue>
равно 1 (somekey = 1
) и оставьте его в списке.
2) Проверьте, есть ли в SomeClass's
date
НЕ равно sysdate
, затем проверьте значение в key="somekey"
в List<PairKeyValue>
равно 0 (somekey = 0
), затем оставьте его в списке.
3) И игнорируйте другие значения.
Итак, в конце мне нужен отфильтрованный список только текущих значений в пределах SomeClass
.
У меня есть понимание, но мне не нравится, что он не использует только потоковый API:
availableQuotes =ArrayList ();
if (CollectionUtils.isNotEmpty(availableQuotes)) {
availableQuotes = availableQuotes
.stream()
.filter(this::checkDate).collect(toList());
}
private boolean checkDate (SomeClass someClass){
if (someClass.getDate().equals(LocalDate.now())) {
return checkDuration(someClass, "0");
} else {
return checkDuration(someClass, "1");
}
}
private boolean checkDuration (SomeClass someClass, String param){
List<PairKeyValue> quotaParams = someClass.getPairKeyValues().stream()
.filter(spKeyValue -> spKeyValue.getKey().equals("duration"))
.filter(spKeyValue -> spKeyValue.getValue().equals(param))
.collect(toList());
return (CollectionUtils.isNotEmpty(quotaParams));
}
Я знаю, что это выглядит ужасно, и я знаю, что это может быть более читабельным, поэтому, пожалуйста, помогите.