Use coletores para converter Lista de Mapa de Objetos - Java

user3819295:

Como faço para usar coletores de modo a converter uma lista de DAOs, a um Map<String, List<Pojo>>

daoList é algo como isto:

[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"

Quero atributo groupBy 'time' e ter uma lista para cada equipe, como segue:

"gools":
       ["id": 34234, "name": "bob", "type": "old"],
       ["id": 34342, "name": "dan", "type": "new"]

"fool":
       ["id": 23423, "name": "sam", "type": "new"]

Pojo parece com isso:

@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class Pojo{

    private String id;
    private String name;
    private String type;
}

Isto é como eu estou tentando fazer isso, obviamente o caminho errado:

public Team groupedByTeams(List<? extends GenericDAO> daoList)
    {

        Map<String, List<Pojo>> teamMap= daoList.stream()
            .collect(Collectors.groupingBy(GenericDAO::getTeam))
    }
Eles foram:

Seu coletor de corrente - .collect(Collectors.groupingBy(GenericDAO::getTeam))- está gerando um Map<String,List<? extends GenericDAO>>.

A fim de gerar um Map<String, List<Pojo>>, você tem que converter seus GenericDAOcasos em Pojocasos encadeando um Collectors.mapping()colector para o Collectors.groupingBy()coletor:

Map<String, List<Pojo>> teamMap = 
    daoList.stream()
           .collect(Collectors.groupingBy(GenericDAO::getTeam,
                                          Collectors.mapping (dao -> new Pojo(...),
                                                              Collectors.toList())));

Isso supõe que você tem algum Pojoconstrutor que recebe uma GenericDAOinstância ou relevantes GenericDAOpropriedades.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=122318&siteId=1
Recomendado
Clasificación