使用收集器将列表转换为对象映射 - Java
Use Collectors to convert List to Map of Objects - Java
如何使用收集器将 DAO 列表转换为 Map<String, List<Pojo>>
daoList 看起来像这样:
[0] : id = "34234", team = "gools", name = "bob", type = "old"
[1] : id = "23423", team = "fool" , name = "sam", type = "new"
[2] : id = "34342", team = "gools" , name = "dan", type = "new"
我想groupBy 'team'属性,并且每个队都有一个列表,如下:
"gools":
["id": 34234, "name": "bob", "type": "old"],
["id": 34342, "name": "dan", "type": "new"]
"fool":
["id": 23423, "name": "sam", "type": "new"]
Pojo 看起来像这样:
@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class Pojo{
private String id;
private String name;
private String type;
}
这就是我尝试这样做的方式,显然是错误的方式:
public Team groupedByTeams(List<? extends GenericDAO> daoList)
{
Map<String, List<Pojo>> teamMap= daoList.stream()
.collect(Collectors.groupingBy(GenericDAO::getTeam))
}
您当前的收集器 - .collect(Collectors.groupingBy(GenericDAO::getTeam))
- 正在生成一个 Map<String,List<? extends GenericDAO>>
。
为了生成 Map<String, List<Pojo>>
,您必须通过将 Collectors.mapping()
收集器链接到 Collectors.groupingBy()
将 GenericDAO
实例转换为 Pojo
实例收藏家:
Map<String, List<Pojo>> teamMap =
daoList.stream()
.collect(Collectors.groupingBy(GenericDAO::getTeam,
Collectors.mapping (dao -> new Pojo(...),
Collectors.toList())));
这是假设您有一些 Pojo
构造函数接收 GenericDAO
实例或相关的 GenericDAO
属性。
使用mapping
作为:
public Map<String, List<Team>> groupedByTeams(List<? extends GenericDAO> daoList) {
Map<String, List<Team>> teamMap = daoList.stream()
.collect(Collectors.groupingBy(GenericDAO::getTeam,
Collectors.mapping(this::convertGenericDaoToTeam, Collectors.toList())));
return teamMap;
}
其中 convertGenericDaoToTeam
之类的转换可能是这样的:
Team convertGenericDaoToTeam(GenericDAO genericDAO) {
return new Team(genericDAO.getId(), genericDAO.getName(), genericDAO.getType());
}
如何使用收集器将 DAO 列表转换为 Map<String, List<Pojo>>
daoList 看起来像这样:
[0] : id = "34234", team = "gools", name = "bob", type = "old"
[1] : id = "23423", team = "fool" , name = "sam", type = "new"
[2] : id = "34342", team = "gools" , name = "dan", type = "new"
我想groupBy 'team'属性,并且每个队都有一个列表,如下:
"gools":
["id": 34234, "name": "bob", "type": "old"],
["id": 34342, "name": "dan", "type": "new"]
"fool":
["id": 23423, "name": "sam", "type": "new"]
Pojo 看起来像这样:
@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class Pojo{
private String id;
private String name;
private String type;
}
这就是我尝试这样做的方式,显然是错误的方式:
public Team groupedByTeams(List<? extends GenericDAO> daoList)
{
Map<String, List<Pojo>> teamMap= daoList.stream()
.collect(Collectors.groupingBy(GenericDAO::getTeam))
}
您当前的收集器 - .collect(Collectors.groupingBy(GenericDAO::getTeam))
- 正在生成一个 Map<String,List<? extends GenericDAO>>
。
为了生成 Map<String, List<Pojo>>
,您必须通过将 Collectors.mapping()
收集器链接到 Collectors.groupingBy()
将 GenericDAO
实例转换为 Pojo
实例收藏家:
Map<String, List<Pojo>> teamMap =
daoList.stream()
.collect(Collectors.groupingBy(GenericDAO::getTeam,
Collectors.mapping (dao -> new Pojo(...),
Collectors.toList())));
这是假设您有一些 Pojo
构造函数接收 GenericDAO
实例或相关的 GenericDAO
属性。
使用mapping
作为:
public Map<String, List<Team>> groupedByTeams(List<? extends GenericDAO> daoList) {
Map<String, List<Team>> teamMap = daoList.stream()
.collect(Collectors.groupingBy(GenericDAO::getTeam,
Collectors.mapping(this::convertGenericDaoToTeam, Collectors.toList())));
return teamMap;
}
其中 convertGenericDaoToTeam
之类的转换可能是这样的:
Team convertGenericDaoToTeam(GenericDAO genericDAO) {
return new Team(genericDAO.getId(), genericDAO.getName(), genericDAO.getType());
}