gpt4 book ai didi

java - 将对象列表转换为 java 8 中的嵌套映射

转载 作者:行者123 更新时间:2023-12-02 09:44:58 25 4
gpt4 key购买 nike

我有一个对象列表,如下所示:

Rating {
Long id;
String aRating;
String bRating;
Date date;

//getters and Setters
}

List<Rating> list = //list with some values in it.

我必须将上面的列表转换为嵌套 map :

Map<Date, Map<CustomEnum, String>> 


Enum CustomEnum {

aRatingEnum("aRating", "someValue");
bRatingEnum("bRating", "someValue");

}

假设列表包含以下值:

Id, Date, aRating, bRating
1 , 2/2/2019, A+, B+
2, 2/2/2018, A, B

然后需要将其转换为以下 map :

Map = {2/2/2019={aRatingEnum=A+, bRatingEnum=B+}, 2/2/2018 = {aRatingEnum=A, bRatingEnum=B}}

我尝试过使用 java 8:

list.stream().collect(Collectors.groupingBy(x->x.getDate(), Collectors.toMap(
//here I am not able to proceed further how should I approach please help.
)))

最佳答案

toMap将多个项目收集到一个集合中。您拥有的是单个对象( Rating )并想要创建一个 Map摆脱它。

我想你想要的是 collectingAndThen它允许您按日期分组,然后转移到 Map整理中Function .

list.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(x->x.getDate(),
lr -> {
Map<CustomEnum, String> result = new EnumMap<>();
Rating r = lr.get(0); // take first rating for that date
result.put(CustomEnum.aRatingEnum, r.getARating());
result.put(CustomEnum.bRatingEnum, r.getBRating());
return result;
})));

或者将该 lambda 重构为方法,或者使用 Map.of如果您使用的是 Java 9 或更高版本。

这将为您提供 Map<Date, Map<CustomEnum, String>> .

关于java - 将对象列表转换为 java 8 中的嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com