Java 8+ 流:检查对象实例的两个字段的列表顺序是否正确
标题可能有点模糊,但这是我所拥有的(在私有化代码中):
包含一些字段(包括大十进制数和日期)的类:
class MyObj{
private java.math.BigDecimal percentage;
private java.util.Date date;
// Some more irrelevant fields
// Getters and Setters
}
在另一个类中,我有这些对象的列表(即)。我现在想要的是一个Java 8流来检查列表是否按验证器的日期和百分比的正确顺序排列。java.util.List<MyObj> myList
例如,以下列表是真实的:
[ 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
有没有一种方法可以使用或某些东西来循环成对来检查它们?使用Java 8流检查列表中的所有日期和百分比是否按正确的顺序排列的最佳方法是什么?.reduce
MyObj
MyObj
另一种可能性是按日期对列表进行排序,然后检查它们是否都按百分比顺序排列,如果这比检查两个字段是否相同更容易。但是,比较百分比对的相同问题仍然存在。MyObj
(PS:我将使用它作为一个,我更喜欢Java 8 lambda,因为我也为其他验证器使用了一些,所以它更符合代码的其余部分。然而,在我的问题中,Java 8 lambda更像是一种偏好而不是要求。com.vaadin.server.SerializablePredicate<MyObj> validator