java 8从对象列表创建自定义对象 [英] java 8 creating custom object from a list of objects
问题描述
这是问题的扩展。我有一个消息列表。我想创建一个包含审计值的自定义消息列表。
This is extension to question .I have a list of messages .I want to create a list of custom message with their audit values.
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"));
}
预期产出为1,abc->审核清单为(10,a1) ),(11,a5);
Expected output is 1,abc->List of audits as (10,a1),(11,a5);
推荐答案
这里的答案(如果我理解正确的话)几乎和以前一样问题,有几个假设。首先,您的 Aud
构造函数实际存在,如下所示:
The answer here (if I understood correctly) is almost the same as in the previous question, with a couple of assumptions. First is that your Aud
constructor is actually present and looks like this:
public Aud(int id, String message) {
this.id = id;
this.message = message;
}
而没有 a Holder
for id和message
,所以我使用了 AbstractMap.SimpleEntry
而不是。
And than you do not have a Holder
for id and message
, so I've used AbstractMap.SimpleEntry
instead.
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())));
编辑
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());
我不知道想要使用可选$检查null c $ c>应该是指。
如果你使用的是setter和getter,你可以替换它:
If you are using setters and getters you can replace this:
m -> new Aud(m.getAudId(), m.getAudMessage())
with:
m -> {
Aud aud = new Aud();
aud.setId(m.getAudId());
aud.setMessage(m.getAudMessage());
return aud;
}
这篇关于java 8从对象列表创建自定义对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!