将基于 caseNumber 的对象列表拆分为新的对象列表

Split an List of objects based caseNumber into a new List of objects

提问人:user22553624 提问时间:10/18/2023 最后编辑:user22553624 更新时间:10/18/2023 访问量:60

问:

我有一个 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 拆分对象列表,并创建该对象自己的列表。

Java 对象 数组列表 拆分

评论

0赞 Twistleton 10/18/2023
您可以使用地图,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>>();

在循环中,检查给定的数字是否存在,如果没有,请创建它:formap

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)));