Conversion utilisant les stream
Bonjour.
Mon projet actuel requiert que je transforme une liste d'objet provenant d'un DB en objet modèle.
Les objets ressemblent à ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class DbMessage {
private String user1Id;
private String user2Id;
private String message;
private Custom status; //pending, sent, read, not received
}
class MessageModel {
private String user1Id;
private String user2Id;
private List<MessageWithMetadata> messages;
} |
L'idée serait de transformer cet objet :
Code:
1 2 3 4 5
| [
{user1Id: 'user1', user2Id: 'user2', message: 'hello world', status: 'sent'},
{user1Id: 'user1', user2Id: 'user2', message: 'how are you?', status: 'sent'},
{user1Id: 'user1', user2Id: 'user3', message: 'sent a photo', status: 'sent'}
] |
en cet objet :
Code:
1 2 3 4 5 6 7 8 9
| [
{user1Id: 'user1', user2Id: 'user2', messages: [
{message: 'hello world', status: 'sent'},
{message: 'how are you?', status: 'sent'}
]},
{user1Id: 'user1', user2Id: 'user3', messages: [
{message: 'sent a photo', status: 'sent'}
]}
] |
Je vois que passer par les stream est la solution, mais je ne maîtrise pas du tout la chose.
J'ai pu écrire ça messagesRepository.findByUserId(userId).stream().collect(Collectors.groupingBy(DbMessage::getUser1Id));, ça me retourne un objet Map<String, List<DbMessage>> que j'aimerais transformer en List<MessageModel>.
Je cherche des conseils pour y arriver et pour progresser.