Название может быть немного неопределенным, но вот что я имею (в приватизированном коде):
Класс с некоторыми полями, включая 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
чтобы проверить их? Какой был бы лучший подход здесь, чтобы проверить, соответствуют ли все даты и проценты MyObj
в моем списке в правильном порядке с использованием потока Java 8?
Другая возможность, возможно, сортировка списка по дате, а затем проверка, все ли они в порядке процента, если это проще, чем проверка обоих полей в одно и то же время. Тем не MyObj
же проблема при сравнении пар MyObj
для процента остается.
(PS: Я буду использовать его для com.vaadin.server.SerializablePredicate<MyObj> validator
, и я предпочитаю Java 8 лямбда, потому что я также использовал некоторые для других валидаторов, так что это будет больше соответствовать остальным кода. Java-лямбда - это скорее предпочтение, чем требование в моем вопросе.)