我有一个list
分,看起来像下面这样
[
{
"busId": "4-3323309834",
"dataDateTime": "2022-08-27 05:22:46",
"busName": "27Tr Solaris Single Deck",
"speedLimit": 80,
"id": 1,
"currentSpeed": 67,
"passengersNo": 80
},
{
"busId": "4-3323309834",
"dataDateTime": "2022-08-27 07:12:10",
"busName": "27Tr Solaris Single Deck",
"speedLimit": 80,
"id": 2,
"currentSpeed": 56,
"passengersNo": 11
},
{
"busId": "4-3323309834",
"dataDateTime": "2022-08-26 03:12:10",
"busName": "27Tr Solaris Single Deck",
"speedLimit": 80,
"id": 3,
"currentSpeed": 31,
"passengersNo": 15
},
{
"busId": "4-3323309834",
"dataDateTime": "2022-08-26 03:12:10",
"busName": "27Tr Solaris Single Deck",
"speedLimit": 80,
"id": 3,
"currentSpeed": 78,
"passengersNo": 15
},
{
"busId": "4-3323309834",
"dataDateTime": "2022-08-26 04:34:10",
"busName": "27Tr Solaris Single Deck",
"speedLimit": 80,
"id": 7,
"currentSpeed": 49,
"passengersNo": 57
}
]
我想要实现的是过滤,例如,分别在日期2022-08-27
和日期2022-08-26
,我只返回一个最大值为currentSpeed
的记录,这样我的最终列表如下所示
[
{
"busId": "4-3323309834",
"dataDateTime": "2022-08-27 05:22:46",
"busName": "27Tr Solaris Single Deck",
"speedLimit": 80,
"id": 1,
"currentSpeed": 67,
"passengersNo": 80
},
{
"busId": "4-3323309834",
"dataDateTime": "2022-08-26 03:12:10",
"busName": "27Tr Solaris Single Deck",
"speedLimit": 80,
"id": 3,
"currentSpeed": 78,
"passengersNo": 15
}
]
下面是我的代码外观以及我填充列表的方式
public static void main(String[] args) {
List<HashMap<String, Object>> myList = new ArrayList<>();
myList.add(new HashMap<>(Map.of("id", 1,
"busId","4-3323309834",
"busName","27Tr Solaris Single Deck",
"currentSpeed",67,
"passengersNo",80,
"speedLimit",80,
"dataDateTime","2022-08-27 05:22:46")));
myList.add(new HashMap<>(Map.of("id",2,
"busId","4-3323309834",
"busName","27Tr Solaris Single Deck",
"currentSpeed",56,
"passengersNo",11,
"speedLimit",80,
"dataDateTime","2022-08-27 07:12:10")));
myList.add(new HashMap<>(Map.of(
"id",3,
"busId","4-3323309834",
"busName","27Tr Solaris Single Deck",
"currentSpeed",31,
"passengersNo",15,
"speedLimit",80,
"dataDateTime","2022-08-26 03:12:10")));
myList.add(new HashMap<>(Map.of(
"id",3,
"busId","4-3323309834",
"busName","27Tr Solaris Single Deck",
"currentSpeed",78,
"passengersNo",15,
"speedLimit",80,
"dataDateTime","2022-08-26 03:12:10")));
myList.add(new HashMap<>(Map.of(
"id",7,
"busId","4-3323309834",
"busName","27Tr Solaris Single Deck",
"currentSpeed",49,
"passengersNo",57,
"speedLimit",80,
"dataDateTime","2022-08-26 04:34:10")));
}
下面是我试图使用的过滤器,但我在下面的过滤器代码中得到了Not a statement
List<HashMap<String, Object>> myList2 = myList.stream()
.collect(Collectors.groupingBy(hashmap ->
List.of(hashmap.get("busId"),
hashmap.get("currentSpeed"),
Collectors.maxBy(Comparator.comparing(HashMap::get("dataDateTime")))));
System.out.println(Config.ANSI_CYAN + "MyListToJsonPrint: " +
new GsonBuilder().setPrettyPrinting().create().toJson(myList2));
有没有一种有效的方法可以用来过滤