Название может быть немного расплывчатым, но вот что у меня есть (в приватизированном коде):
Класс с некоторыми полями, включая BigDecimal и Date:
class MyObj{
private java.math.BigDecimal percentage;
private java.util.Date date;
// Some more irrelevant fields
// Getters and Setters
}
В другом классе у меня есть список этих объектов (т.е. java.util.List<MyObj> myList
). Теперь я хочу, чтобы поток Java 8 проверял, находится ли список в правильном порядке и дат, и процентов для моего валидатора.
Например, следующий список будет правдивым:
[ MyObj { percentage = 25, date = 01-01-2018 },
MyObj { percentage = 50, date = 01-02-2018 },
MyObj { percentage = 100, date = 15-04-2019 } ]
Но этот список будет ошибочным, потому что процент не в правильном порядке:
[ MyObj { percentage = 25, date = 01-01-2018 },
MyObj { percentage = 20, date = 01-02-2018 },
MyObj { percentage = 100, date = 15-04-2019 } ]
И этот список также будет неверным, потому что даты не в правильном порядке:
[ MyObj { percentage = 25, date = 10-03-2018 },
MyObj { percentage = 50, date = 01-02-2018 },
MyObj { percentage = 100, date = 15-04-2019 } ]
Одним из возможных решений может быть создание Pairs
, например, , а затем использование !
и .anyMatch
для проверки каждого отдельного Pair<MyObj>
. Но я не хочу создавать класс Pair
только для этой цели, если это возможно.
Возможно, есть способ использовать .reduce
или что-то, чтобы перебрать пары MyObj
, чтобы проверить их? Каков наилучший подход, чтобы проверить, все ли даты и проценты MyObj
в моем списке в правильном порядке с использованием потока Java 8?
Другой возможностью, возможно, является сортировка списка по дате, а затем проверка, все ли они в порядке процентов, если это проще, чем проверка того, что оба поля выполняются одновременно. Тем не менее, та же проблема со сравнением пар MyObj
в процентах остается.
(PS: я буду использовать его для com.vaadin.server.SerializablePredicate<MyObj> validator
, и я предпочитаю лямбду Java 8, потому что я также использовал некоторые для других валидаторов, так что это будет больше соответствовать остальной части кода. Однако в моем вопросе Java 8 лямбда является скорее предпочтением, чем требованием.)