Java 8 create custom object from list of objects
This is an extension for the question. I have a list of messages. I want to create a list of custom messages with their audit values.
list of ids from list of age using java 8
public class Messages {
int id;
String message;
int audId;
String audmessage;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getAudId() {
return audId;
}
public void setAudId(int audId) {
this.audId = audId;
}
public String getAudmessage() {
return audmessage;
}
public void setAudmessage(String audmessage) {
this.audmessage = audmessage;
}
public Messages(int id, String message, int audId, String audmessage) {
this.id = id;
this.message = message;
this.audId = audId;
this.audmessage = audmessage;
}
}
public class CustomMessage {
int id;
String msg;
List<Aud> list;
//getters and setters
}
public class Aud {
int id;
int message;
//getters and setters
}
public class Demo {
public static void main(String args[]){
List<Messages> list = new ArrayList<Messages>();
list.add(new Messages(1,"abc",10,"a1"));
list.add(new Messages(2,"ac",21,"a2"));
list.add(new Messages(3,"adc",31,"a3"));
list.add(new Messages(4,"aec",40,"a4"));
list.add(new Messages(1,"abc",11,"a5"));
list.add(new Messages(2,"ac",22,"a5"));
}
Expected Result: 1, abc-> Checklist as (10, a1), (11, a5);
source to share
The answer here (if I understood correctly) is almost the same as in the previous question, with a few assumptions. First, your constructor is Aud
actually present and looks like this:
public Aud(int id, String message) {
this.id = id;
this.message = message;
}
And what you don't have Holder
for id and message
, so I used AbstractMap.SimpleEntry
.
Map<SimpleEntry<Integer, String>, List<Aud>> map = list.stream()
.collect(Collectors.groupingBy(
m -> new SimpleEntry<>(m.getId(), m.getMessage()),
Collectors.mapping(
m -> new Aud(m.getAudId(), m.getAudMessage()),
Collectors.toList())));
EDIT
List<CustomMessage> l = list.stream()
.collect(Collectors.groupingBy(m -> new SimpleEntry<>(m.getId(), m.getMessage()),
Collectors.mapping(m -> new Aud(m.getAudId(), m.getAudMessage()), Collectors.toList())))
.entrySet()
.stream()
.map(e -> new CustomMessage(e.getKey().getKey(), e.getKey().getValue(), e.getValue()))
.collect(Collectors.toList());
I have no idea what it means want to check for null using optional
.
If you are using setters and getters, you can replace this:
m -> new Aud(m.getAudId(), m.getAudMessage())
from:
m -> {
Aud aud = new Aud();
aud.setId(m.getAudId());
aud.setMessage(m.getAudMessage());
return aud;
}
source to share