提问人:user22553624 提问时间:10/18/2023 最后编辑:user22553624 更新时间:10/18/2023 访问量:60
将基于 caseNumber 的对象列表拆分为新的对象列表
Split an List of objects based caseNumber into a new List of objects
问:
我有一个 List of Messages 对象。我的消息对象由 sender 和 CaseNumber 组成。SQL 查询将所有消息拉取到一个列表中。在此列表中,我有多个相同的 CaseNumber。
我想完成的是循环浏览当前的消息列表,并根据 CaseNumber 将它们拆分为自己的单独列表。
我已经摆弄了,但我不确定如何在 for 循环中完成此操作。
public class Messages {
private String sender = "";
private int caseNumber = 0
public int getCaseNumber() {
return caseNumber;
}
public void setCaseNumber(int caseNumber) {
this.caseNumber = caseNumber;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
}
SQL makes a call and maps the vars into a huge object.
public List<Messages> getAllMessages()
{
List<Messages> entries = null;
String sql = "select sender, caseNumber from Messages";
entries = jdbcTemplate.query(sql, new MessagesMapper());
return entries;
}
//for loop in my function.
for(Messages m : allMessages)
{
//This is the part i am stumped on how to I check if case number = case number if so create a new Messages List. Then if any of the additional cases in the list, add them to this new List. If it's a new caseNumber, create a new list.
}
我想过更改 sql 调用只是为了按 caseNumber 拉取每条消息,但我觉得我可能只是在敲打 SQL,这感觉效率不高。
希望这对我想要完成的事情有意义。根据 caseNumber 拆分对象列表,并创建该对象自己的列表。
答:
3赞
Rifat Rubayatul Islam
10/18/2023
#1
您可以使用 java 流对列表进行分组。api
Map<Integer, List<Message>> groupedMessages = allMessages.stream().collect(Collectors.groupingBy(Message::getCaseNumber));
1赞
Lajos Arpad
10/18/2023
#2
您可以创建一个对象,例如Map<Integer, List<String>>
Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
在循环中,检查给定的数字是否存在,如果没有,请创建它:for
map
if (!map.containsKey(caseNumber)) {
map.put(caseNumber, new ArrayList<String>());
}
map.get(caseNumber).add(sender);
0赞
Reilas
10/18/2023
#3
创建一个 Map,其中键是 caseNumber,值是 List of Messages 对象。
Map<Integer, List<Messages>> map = new TreeMap<>();
for (Messages m : getAllMessages())
if (map.containsKey(m.caseNumber)) map.get(m.caseNumber).add(m);
else map.put(m.caseNumber, new ArrayList<>(List.of(m)));
评论